简体   繁体   中英

Scala's hierarchy mapped to Java's

As "Programming in Scala: A comprehensive step-by-step Guide" states, in Scala there are not basic types values, just objects: Integers are Int instances and doubles are Double instances. I assume that these classes map to Java's Integer , Double ... classes and, therefore, are mapped as Object subclasses.

In the book, the following type hierarchy (classes as types) is presented:

在此处输入图片说明

Few pages after this graph is presented, you can read:

在此处输入图片说明

What somehow troubles me is: If Scala´s Double maps to Java's Double which is an specification of java.lang.Object and AnyRef is an alias for java.lang.Object too, should't AnyVal be a subclass of AnyRef ?

EDIT

Few pages after that I read that primitive types are not mapped to Java's primitive types wrapper classes unless their "boxed" versions are required; but I am still confused since it seems to me that not all Scala's objects are java.lang.Object sublcasses instances. That is: There are classes in Scala which could be not translated in the JVM as Object subclasses.

Java does not only have types that extend java.lang.Object (aka scala.AnyRef ), but primitive types, eg int , double , boolean , ... In Scala you find them under scala.Any . So a scala.Int corresponds to a Java int . Not java.lang.Integer ; not until boxing occurs, a mechanism on the JVM to be able to pass primitives to generic methods. Both Java and Scala do auto-boxing, that is construct a reference around a primitive type when a reference is needed.

The difference in Scala is, it doesn't treat scala.Int any different from say String , it doesn't matter whether the type corresponds to a JVM primitive or not. You can call methods on scala.Int as if it was any regular object. In the byte-code you will still have primitive types.

This is why Scala is sometimes called a true or more pure object-oriented language than Java.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM