gpt4 book ai didi

java - 一个类可以有两个同名的无参数方法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:43 24 4
gpt4 key购买 nike

阅读文档:

https://docs.oracle.com/javase/9/docs/api/java/util/ServiceLoader.html

我被这句话搞糊涂了:

The service provider class file has more than one public static no-args method named "provider".

假设 JavaDoc 是正确的,并且假设 static 成员不是继承的,这在 Java 中怎么可能呢?或者它是 JavaDoc 中的错误?

最佳答案

how this might be possible in Java?

不是,因为方法签名必须是唯一的,签名是方法名和参数类型。

除了,这不是 JVM 的工作方式,而是 Java 的工作方式。

JVM 将返回类型作为签名的一部分,因此从技术上讲,一个类可以有多个具有相同名称和参数但返回类型不同的方法。

所以它肯定会发生在用其他 JVM 语言编写的类中,但它会发生在 Java 类中吗?

是的,当您为重写的方法提供协变返回类型时,它可以。参见 Can overridden methods differ in return type?

给定 that answer 中的示例,真正发生的是这个假代码:

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 成员内部类,反之亦然。

关于java - 一个类可以有两个同名的无参数方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57914824/

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