gpt4 book ai didi

java - 对 Object.clone() 的功能引用不编译

转载 作者:太空狗 更新时间:2023-10-29 22:41:27 27 4
gpt4 key购买 nike

Compiling

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

这毫无意义,因为类应该能够访问其父类的 protected 方法。此表达式在 Eclipse 的编译器中运行良好。

此外,() -> super.clone() 编译得很好....

这是一个错误吗?

最佳答案

super 实际上不是一个表达式,也没有静态类型可谈。 super.foo()this.foo() 具有相同的访问权限;只是,方法调用在字节码中的翻译方式不同,作为“ super 调用”,而不是“普通调用”。

JLS对此不是很清楚;例如在 protected access 的部分,没有提到super.protectedMember形式;但很明显,这种形式应该在 JLS 中讨论;它应该是可访问的。 (该部分确实建议 X::mX.m 应该被视为相同的 w.r.t. 访问权限)

method reference的部分,措辞也含糊不清;尽管如此,super::clone 的访问方式应该与 super.clone() 的访问方式相同。

错误报告已创建:JDK-8139836: “Can't use super::x method reference when x is protected” .它的当前状态是将在 Java 9 中得到修复。

关于java - 对 Object.clone() 的功能引用不编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33107500/

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