我对这句话感到困惑:服务提供者类文件有多个名为public static“”的无参数方法provider。假设 JavaDoc 是正确的,并且假设static成员不是继承的,那么这在 Java 中怎么可能呢?或者这是JavaDoc中的错误?
1 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
这在 Java 中怎么可能实现?
事实并非如此,因为方法签名必须是唯一的,而签名是方法名称和参数类型。
不过,这不是 JVM 的工作原理,而是 Java 的工作原理。
JVM 将返回类型作为签名的一部分,因此从技术上讲,一个类可以具有多个具有相同名称和参数但返回类型不同的方法。
所以对于用其他 JVM 语言编写的类肯定会发生这种情况,但是对于 Java 类会发生这种情况吗?
是的,当您有重写方法的协变返回类型时,它可以。真正发生的是这个假代码:
class ShapeBuilder {
...
public Shape build() {
....
}
class CircleBuilder extends ShapeBuilder{
...
@Override
public bridge Shape build() { // override matches full JVM signature
return <Circle>build(); // call other method with different return type
}
public Circle build() {
....
}
“桥接”方法是编译器生成的一种隐藏方法,用于使Java和JVM之间的差异正常工作。
仅供参考:在这方面,“桥”方法类似于“合成”方法,它们由编译器生成,以允许外部类访问private内部类的成员,反之亦然。
添加回答
举报
0/150
提交
取消