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.
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”.Matchableis also a supertype ofAnyValandAnyRef. -
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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access