Почему Scala жалуется на незаконное наследование, когда в иерархии классов есть необработанные типы? - PullRequest
4 голосов
/ 14 февраля 2011

Я пишу оболочку, которая принимает Scala ObservableBuffer и запускает события, совместимые с Eclipse / JFace Databinding framework.

В структуре 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.Это ожидаемое поведение, и как я могу обойти это?

Ответы [ 2 ]

5 голосов
/ 15 февраля 2011

Наличие исходного типа Java в иерархии наследования вызывает подобные проблемы.Одно из решений состоит в том, чтобы написать небольшой кусочек Java для исправления необработанного типа, как в ответе на метод сравнения переопределения косых черт класса Scala из интерфейса Java, который расширяет java.util.comparator

Дляподробнее о том, почему необработанные типы являются проблемными для scala, см. эту ошибку http://lampsvn.epfl.ch/trac/scala/ticket/1737.У этой ошибки есть обходной путь, использующий экзистенциальные типы, которые, вероятно, не будут работать в данном конкретном случае, по крайней мере, без большого количества приведения, потому что параметр типа java.util.List находится в позициях варианта как co, так и наоборот.

0 голосов
/ 14 февраля 2011

При взгляде на javadoc аргумент конструктора не параметризован.

Я бы попробовал это:

val list = new java.util.ArrayList[_]
val obsList = new ObservableList(list, null) {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...