我正在寫一個需要Scala ObservableBuffer
並且觸發兼容Eclipse/JFace Databinding框架的事件的包裝。爲什麼Scala會在類層次結構中存在原始類型時抱怨非法繼承?
在數據綁定框架中,有一個摘要ObservableList
,用於裝飾普通的Java列表。我想重新使用這個基類,但即使這樣簡單的代碼失敗:
val list = new java.util.ArrayList[Int]
val obsList = new ObservableList(list, null) {}
與錯誤:
illegal inheritance; anonymous class $anon inherits different type instances of trait Collection: java.util.Collection[E] and java.util.Collection[E]
illegal inheritance; anonymous class $anon inherits different type instances of trait Iterable: java.lang.Iterable[E] and java.lang.Iterable[E]
爲什麼?它與原始類型有關嗎? ObservableList
執行IObservableList
,它擴展了原始類型java.util.List
。這是預期的行爲,我該如何解決它?
我不知道答案,但它的工作原理是什麼時,列表是由對象而不是原始參數化? (例如'ArrayList [String]'或'ArrayList [java.lang.Integer]'?) –
不,我仍然得到相同的錯誤。 –
我不是Scala的專家,但你爲什麼在'ObservableList'的初始化中使用大括號?這不是一種部分功能嗎?在Java中,這將是繼承,但你爲什麼要繼承它? –