Advanced Types

If you have come from Java, most of these things may not be surprising. As such, let's look at some other features of Scala's type system.

Abstract Type Members

Abstract type members are type members of an object or class that are left abstract. They can provide some abstraction without the verbosity of type parameters. If a type is intended to be used existentially in most cases, we can cut some verbosity by using a type member instead of a parameter.

class Operator {
  type ToolOfChoice
}

class Susan extends Operator {
  type ToolOfChoice = Hammer
}

class Operator[ToolOfChoice]
class Susan extends Operator[ToolOfChoice]

You can refer to an abstract type variable using the hash operator:

scala> val tool: Susan#ToolOfChoice = new Hammer ...

Get Professional Scala now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.