我正在写一个需要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中,这将是继承,但你为什么要继承它? –