Я пытался решить эту очень странную ошибку в течение нескольких часов, и я просто не могу понять это.Проблемы с компиляцией Xtend со статическими вложенными интерфейсами
У меня есть следующий код в свой собственный исходный файл Xtend в проекте в Затмении:
interface Apple {
def void test() {}
static interface Green extends Apple {
override test() {
Apple.super.test();
}
}
}
И по какой-то причине я получаю ошибку компиляции на ключевое слово «супер» в приведенном выше коде, который говорит:
проблема Java: нет ограждающий экземпляр типа Apple, не будет доступен в объеме
при осмотре т он исходный код Java, который производит Xtend, я вижу, что он создает вложенный интерфейс как нестатический, а также использует ключевое слово «this» вместо «super», что, очевидно, вызовет эту ошибку.
Xtend выход (переформатировать):
public interface Apple {
public default void test() {}
public interface Green extends Apple {
@Override
public default void test() {
Apple.this.test();
}
}
}
Почему компилятор Xtend это делает?
Возможно, самая странная часть заключается в том, что выход компилятора является непоследовательным. Когда я переименовываю суперинтерфейс, исходный код Java, сгенерированный Xtend, изменяется семантически.
Я использую плагин Eclipse, Xtend для Xtend 2.9.0 с мишенью исток Java 8.
Edit: Я должен отметить, что я в курсе, что приведенный выше код, кажется, семантически бессмысленно, и, очевидно, не требуется, учитывая, что метод наследуется. Однако это упрощенный пример моего фактического, более практичного кода.
походит Жук. можете ли вы подать билет? –
Я сообщил об этой проблеме: https://bugs.eclipse.org/bugs/show_bug.cgi?id=487861 – snorbi