我幾乎可以肯定,這個問題之前已經被問過了,但我錯過了正確的詞語來找到它。爲什麼Scala偶爾會回退到Java對象?
scala> Seq[Any](3, 3.4)
res0: Seq[Any] = List(3, 3.4)
scala> res0(1).getClass
res1: Class[_] = class java.lang.Double
scala> Seq(3, 3.4)
res2: Seq[Double] = List(3.0, 3.4)
scala> res2(1).getClass
res3: Class[Double] = double
爲什麼斯卡拉處理我Double
輸入爲java.lang.Double
一個Seq[Any]
內,但它一直爲scala.Double
與Seq[AnyRef]
工作時?有沒有辦法來防止這種行爲,而是總是使用Scala類型?
但是,例如'3'的文字是'Int <:AnyVal <:Any'。我一直在問的是'Seq [Any]'。所以乍一看,維護Scala類型不應該是一個問題。爲什麼拳擊變得必要? – Taig
@泰格拳擊是需要的,因爲集合在對象上工作。 Scala試圖隱藏存在原始類型和對象的事實,但在JVM級別上,這種區別確實存在。由於Scala在JVM上運行,因此受到此限制。它試圖隱藏它,但並不總是可以的。 JVM沒有'AnyVal'的等價物,因此在集合中,層次結構只看起來像'java.lang.Integer <:Object'。 –