Abstract types
Okay, first things first. We tried to achieve abstraction when we introduced type parameterizing. We will do the same thing using abstract type members. But what's an abstract type member? How do we write them, how can we use them, and why do we even need them when we already have parameterized types? These are a few questions. We'll try answering them. So let's start with the first question. How do we write an abstract type. This is done as follows:
trait ThinkingInTermsOfT { type T }
Okay, we just wrote a trait named ThinkingInTermsOfT
and it has an abstract type member. So, to declare an abstract type member we use the keyword type
along with the parameter name that in our case is T
. From our elementary Scala introduction or, let's say, from previous chapters, we know how we can instantiate a trait. So when we instantiate our trait, we'll give a type to our abstract member. That's going to be a concrete type:
val instance = new ThinkingInTermsOfT { type T = Int...