试图理解"最终的抽象类Int private在Scala中扩展AnyVal

ila*_*ngo 24 scala

来自Java Land我一直在努力教自己Scala.最近我与玩弄Int数据类型,我决定以查找API为int类在这里.

令我困惑的是类的定义Int,即abstract final.

我很抱歉,如果我不上的意义念起来abstractfinal问这个问题之前,斯卡拉,但是我很好奇,所以我输入了这个职位的时候了.

所以我想了解的是:是的语义abstract,finalextends在斯卡拉不同?再次,这是最好的我的理解是在Java中,一个不能abstractfinal在同一时间.那我怎么解释final abstract class Int private extends AnyVal

0__*_*0__ 29

正如注释中指出的om-nom-nom,abstract禁止实例化(new Int),而final禁止子类化(new Int { ... }).

原因是它scala.Int直接由Java虚拟机的原始整数类型表示; 其他类似的类型Byte,Short,Char,Long,Float,Double,Boolean.因为它们是运行时的原始类型(表现出比所谓的盒装类型更好的性能)并且JVM不允许添加新的原语,所以没有合法的方法来扩展这些类型.除了通过给出literal(val i: Int = 33)之外,没有办法实例化它们.

Scala具有这些类型来创建统一的对象系统,其中原始类型和"对象"之间没有逻辑差异.然而,有在其顶部的等级的区别AnyRef(对应于java.lang.Object)和AnyVal(对应于这些原始类型;以及将Scala的新类型Unit).

有关统一类型系统的更多信息,请参阅Scala旅:统一类型