【发布时间】:2016-02-16 18:04:22
【问题描述】:
我已经尝试解决这个非常奇怪的错误好几个小时了,但我根本想不通。
我在 Eclipse 的一个项目中自己的 Xtend 源文件中有以下代码:
interface Apple {
def void test() {}
static interface Green extends Apple {
override test() {
Apple.super.test();
}
}
}
由于某种原因,我在上述代码中的关键字“super”上遇到编译器错误:
Java 问题:无法访问 Apple 类型的封闭实例 范围
在检查 Xtend 生成的 Java 源代码时,我看到它正在将嵌套接口创建为非静态的,并且使用关键字“this”而不是“super”,这显然会导致此错误。
Xtend 输出(重新格式化):
public interface Apple {
public default void test() {}
public interface Green extends Apple {
@Override
public default void test() {
Apple.this.test();
}
}
}
Xtend 编译器为什么要这样做?
也许最奇怪的部分是编译器的输出不一致。当我重命名超级接口时,Xtend 生成的 Java 源代码在语义上发生了变化。
我正在使用适用于 Xtend 2.9.0 的 Eclipse Xtend 插件,源目标是 Java 8。
编辑:我应该注意,我知道上面的代码在语义上似乎毫无意义,并且鉴于该方法是继承的,显然是不必要的。然而,这是我实际的、更实用的代码的简化案例。
【问题讨论】:
-
听起来像一个错误。你可以提交一张票吗?