【发布时间】:2015-10-13 16:06:01
【问题描述】:
import java.util.concurrent.Callable;
class Ideone
{
Callable<?> x = super::clone;
}
使用 Oracle JDK 给出:
Main.java:6: error: incompatible types: invalid method reference
Callable<?> x = super::clone;
^
clone() has protected access in Object
这是没有意义的,因为一个类应该能够访问其父级的受保护方法。这个表达式在 Eclipse 的编译器中运行良好。
另外,() -> super.clone() 编译良好....
这是一个错误吗?
【问题讨论】:
-
this::clone工作吗? -
我可以用 JDK 1.8.0_51 和 Eclipse Mars 4.5.0 重现这个。看起来像一个 Eclipse 错误。
-
工作正常 JDK 1.8.0_60 和 Eclipse Mars
-
-
@billc.cn 我非常简单地阅读了 6.6.2:仅允许在子类的主体内访问受保护的成员。 此外,三个要点适用于其中指定的条件。这些要点是为了防止访问同级类中的受保护成员,
super不属于那里。所以它属于介绍性句子,因此在没有任何三个限制的情况下被允许。
标签: java lambda compiler-errors java-8