2017-09-13 71 views
0

在Scala中/火花數據幀斯卡拉:鑄造和分配

dfReduced.schema.fieldNames 

是Java字符串數組(字符串[])。然而,

dfReduced.schema.fieldNames.asInstanceOf[Seq[String]] 

拋出

java.lang.ClassCastException:[Ljava.lang.String;不能投到 scala.collection.Seq

分配相同的數組到一個Seq [String]沒問題。

val f3:Seq[String]=dfReduced.schema.fieldNames 

作爲Java程序員這讓我驚訝因爲兩者都需要在Java中鑄造。有人可以解釋爲什麼有這種區別在斯卡拉

(請注意,我不是關鍵的,我只是想了解斯卡拉更好)

+2

不同的是'投與'編譯time'類型歸屬運行time'類型。這個StackOverflow [鏈接](https://stackoverflow.com/a/3412235/6316508)可能是你感興趣的。 –

回答

3

之所以val f3:Seq[String]=dfReduced.schema.fieldNames這工作是因爲在Scala中有隱可用的轉換可以隱式地將Array[T]轉換爲Seq[T]

在Java中,沒有可用的這種類型的隱式轉換。

As Leo C在評論The difference is run-time type cast versus compile-time type ascription中提及。欲瞭解更多信息,請參閱此link

希望這將清除您的麪糰

感謝