gpt4 book ai didi

scala - 当类层次结构中有原始类型时,为什么 Scala 会提示非法继承?

转载 作者:行者123 更新时间:2023-12-01 02:51:02 25 4
gpt4 key购买 nike

我正在编写一个采用 Scala ObservableBuffer 的包装器并触发与 Eclipse/JFace Databinding 兼容的事件框架。

在 Databinding 框架中,有一个摘要 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 class cant override compare method from Java Interface which extends java.util.comparator 的答案。

有关为什么原始类型对 scala 有问题的更多信息,请参阅此错误 http://lampsvn.epfl.ch/trac/scala/ticket/1737 .该错误有一个使用存在类型的解决方法,可能不适用于这种特殊情况,至少在没有大量转换的情况下不会,因为 java.util.List 类型参数位于 co 和 contra 变体位置。

关于scala - 当类层次结构中有原始类型时,为什么 Scala 会提示非法继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com