Chapter 13. The Scala Type Hierarchy

We’ve already seen many of the types available in Scala’s library. Now, we’ll fill in the details about the hierarchy of types. Chapter 14 will discuss the collections. Figure 13-1 shows the large-scale structure of the hierarchy for Scala types.

ps3e 1301
Figure 13-1. Scala’s type hierarchy

At the root of the type hierarchy is Any. It has no supertypes and four subtypes:

  • Matchable, the supertype of all types that support pattern matching, which we discussed in “Safer Pattern Matching with Matchable”. Matchable is also a supertype of AnyVal and AnyRef.

  • AnyVal, the supertype of value types and value classes.

  • AnyRef, the supertype of all reference types.

  • Universal traits, which we discussed in “Value Classes”.

AnyVal has nine concrete subtypes, called the value types. They don’t require heap allocation of instances. Seven of them are numeric value types: Byte, Char, Short, Int, Long, Float, and Double. The remaining two are nonnumeric: Unit and Boolean.

Value classes also extend AnyVal (see “Value Classes”).

In contrast, all the other types are reference types, because instances of them are allocated in the heap and managed by reference. They are subtypes of AnyRef.

Because AnyVal and AnyRef subtype Matchable, all their subtypes can be used in pattern matching. The only types for which values can’t be used in pattern matching are Any, method ...

Get Programming Scala, 3rd Edition 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.