我正在编写一个采用 Scala 的包装器ObservableBuffer并激发与兼容的事件Eclipse/JFace 数据绑定框架。
在数据绑定框架中,有一个抽象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
。这是预期的行为吗?我该如何解决它?
继承层次结构中存在 Java 原始类型会导致此类问题。一种解决方案是编写一点 Java 来修复原始类型,如答案所示Scala 类无法覆盖扩展 java.util.comparator 的 Java 接口中的比较方法
有关为什么原始类型对于 scala 来说是有问题的更多信息,请参阅此错误http://lampsvn.epfl.ch/trac/scala/ticket/1737。该错误有一个使用存在类型的解决方法,该解决方法可能不适用于这种特殊情况,至少在没有大量转换的情况下是这样,因为 java.util.List 类型参数同时位于 co 和 contra 变体位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)