Jea*_*let 4 inheritance scala raw-types scala-java-interop
我正在编写一个包装器,它将Scala ObservableBuffer和fires事件与Eclipse/JFace Databinding框架兼容.
在Databinding框架中,有一个抽象ObservableList来装饰普通的Java列表.我想重用这个基类,但即使这个简单的代码也会失败:
val list = new java.util.ArrayList[Int]
val obsList = new ObservableList(list, null) {}
Run Code Online (Sandbox Code Playgroud)
有错误:
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]
Run Code Online (Sandbox Code Playgroud)
为什么?它与原始类型有关吗?ObservableListimplements IObservableList,扩展原始类型java.util.List.这是预期的行为,我该如何解决它?
在继承层次结构中具有Java原始类型会导致此类问题.一种解决方案是编写一小部分Java来修复原始类型,就像Java接口中扩展java.util.comparator的Scala类cant覆盖比较方法的答案一样
有关为什么原始类型对scala有问题的更多信息请参阅此错误http://lampsvn.epfl.ch/trac/scala/ticket/1737.该bug有一个解决方法,使用存在类型可能不适用于这种特定情况,至少没有大量的转换,因为java.util.List类型参数在co和contra变量位置.
| 归档时间: |
|
| 查看次数: |
1186 次 |
| 最近记录: |