簡體   English   中英

試圖理解“最終抽象類 Int private extends AnyVal in Scala

[英]trying to understand "final abstract class Int private extends AnyVal in Scala

來自 Java Land 我一直在嘗試自學 Scala。 最近我與玩弄Int數據類型,我決定以查找API為int類在這里

讓我困惑的是Int的類定義,它是abstract final

如果我在問這個問題之前沒有閱讀 Scala 中abstractfinal的含義,我很抱歉,但我很好奇,所以我馬上打出了這篇文章。

所以我想理解的是:Scala 中abstractfinalextends的語義是否不同? 同樣,據我所知,在 Java 中,不能同時具有abstractfinal 那么我如何解釋final abstract class Int private extends AnyVal

正如 om-nom-nom 在評論中指出的那樣, abstract禁止實例化( new Int ),而final禁止子類化( new Int { ... } )。

這樣做的原因是scala.Int直接用Java虛擬機的原始整數類型表示; 其他類似的類型是ByteShortCharLongFloatDoubleBoolean 因為它們是運行時的原始類型(表現出比所謂的裝箱類型更好的性能)並且 JVM 不允許添加新的原始類型,所以沒有合法的方法來擴展這些類型。 除了提供文字( val i: Int = 33 )之外,也沒有辦法實例化它們。

Scala 擁有這些類型來創建一個統一的對象系統,其中原始類型和“對象”之間沒有邏輯差異。 然而,在頂部有一個層次區別,即AnyRef (對應於java.lang.Object )和AnyVal (對應於那些原始類型;並添加了 Scala 的新類型Unit )。

更多關於統一類型系統的信息由Tour of Scala: Unified Types 提供

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM