scala - 试图理解“Scala 中的最终抽象类 Int private 扩展 AnyVal

标签 scala

来自 Java Land,我一直在尝试自学 Scala。最近我正在研究 Int 数据类型,我决定查找 Int 类的 API here .

让我困惑的是Int的类定义,它是abstract final

如果我在问这个问题之前没有阅读 Scala 中 abstractfinal 的含义,我很抱歉,但我很好奇,所以我立即写了这篇文章。

所以我想理解的是: Scala 中 abstractfinalextends 的语义是否不同? 再次强调,据我所知,在 Java 中,不能同时拥有 abstractfinal。 那么我该如何解释final抽象类Int private extends AnyVal

最佳答案

正如 om-nom-nom 在评论中指出的那样,abstract 禁止实例化 (new Int),而 final 禁止子类化 (new Int { ... })。

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

Scala 使用这些类型来创建一个统一的对象系统,其中基本类型和“对象”之间没有逻辑差异。然而,顶部有一个层次结构的区别,即 AnyRef(对应于 java.lang.Object)和 AnyVal(对应于这些原始类型;并添加 Scala 的新类型 Unit)。

有关统一类型系统的更多信息由 Tour of Scala: Unified Types 给出。

关于scala - 试图理解“Scala 中的最终抽象类 Int private 扩展 AnyVal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080534/

相关文章:

scala - 在代理后面使用 dispatch 0.9.5?

scala - Play Famework 2.1 Websockets 是否有 Comet 适配器?

scala - 编写我自己的语法糖函数以使用 Await.result

Java 数组与 Scala 数组

scala - 在 Scala 中使用 None 或 EmptyMyObj?

generics - 使用泛型和协方差进行 Scala 类型推断,scalac 中可能存在的问题

scala - Scala 中的面向对象

scala - 使用具有多个类型参数的类型类

scala - 如何在大窗口上优化窗口聚合?

java - Skype4Java 在 Mac OS 上通过 Scala