当前位置: 首页 > 知识库问答 >
问题:

方法在Java中的签名是否包括其返回类型?

狄令
2023-03-14

Java类/接口中的方法签名是否包含其返回类型?

例子:

Java是否知道这两种方法之间的区别:

public class Foo {
    public int  myMethod(int param) {}
    public char myMethod(int param) {}
}

或者可能只有方法名和参数列表才重要?

共有3个答案

戴鸿羽
2023-03-14

在字节码级别,“返回类型”是方法签名的一部分。考虑一下这个

public class Test1  {
    public Test1 clone() throws CloneNotSupportedException {
        return (Test1) super.clone();
    }
}

字节码中有2个clone()方法

public clone()LTest1; throws java/lang/CloneNotSupportedException 

public clone()Ljava/lang/Object; throws java/lang/CloneNotSupportedException 

它们仅在返回类型上有所不同。

宇文俊风
2023-03-14

Java中的类方法签名是否包含返回类型?

在Java,它没有,但在这个JVM中它有,这可能会导致明显的混乱。

接口方法签名是否在Java包括返回类型?

与类方法相同。

还是仅方法名称和参数列表?

Java的方法名称和参数类型。例如,参数注释和名称并不重要。

楚承天
2023-03-14

引用Oracle文档:

定义:方法声明的两个组件包括方法签名、方法名称和参数类型。

由于问题经过编辑包括了这个例子:

public class Foo {
    public int  myMethod(int param) {}
    public char myMethod(int param) {}
}

不,编译器不会知道区别,因为它们的签名:myMethod(int-param)是相同的。第二行:

    public char myMethod(int param) {}

会给你can false:方法已经定义在类中,这进一步证实了上面的说法。

 类似资料:
  • 问题内容: 我正在研究存在的多个实现以及多个的问题。尽管共有几个需要设置的通用变量,但它们也有不同的变量,需要它们各自实现某些特定功能。为了简洁起见,我想让setter使用方法链接,例如: 和 依此类推,有几种不同的实现。从技术上讲,这可以完成我想要的一切,但是,这种方法对执行方法链接时的方法调用顺序很敏感。以下是方法未定义的编译错误: 要求开发人员考虑链中方法调用的顺序。为了避免这种情况,我想让

  • Java不允许通过更改子类的返回类型来重写方法,有什么特别的原因吗? 由于返回类型不是方法签名的一部分,编译器不认为具有不同返回类型(但具有相同名称、相同数量和类型的参数)的方法是相同的吗?

  • 问题内容: 假设我正在设计类似以下界面的内容: 但是,需要注意的是,for的返回类型和参数匹配具体的实现,而不仅仅是。也就是说,如果我具有该实现,则需要具备以下条件: 如上所述,不会引起任何编译错误,但是不能保证在所有实现中返回类型都匹配。当然,甚至不会编译,因为签名与接口不匹配。 一种候选解决方案是在泛型中使用自引用或递归范围: 这将使我得到我想要的东西,但有一个例外:其他实现可能传递错误的泛型

  • 问题内容: 我使用反射将包中的每个方法都获取了,然后根据每个方法的返回类型,我想执行一些操作。但不幸的是,我在收藏方面遇到了问题。当我找到一种方法来返回诸如List之类的集合时,我找不到找到有关List元素类型的方法。我使用下面的代码来获取方法的返回类型。 上面的代码运行良好,并获得了所有返回List的方法,但它只是将java.util.List作为返回类型返回,而我找不到找到了解该List中元素

  • 问题内容: 我正在研究一个项目,一个要求是,如果main方法的第二个参数以“ ” 开头(对于Linux),则应将其视为绝对路径(不是问题),但如果它不是以“”开头”,则它应获取该类的 当前工作路径 ,并将其附加给定的参数。 我可以通过几种方式获取类名:,和,等等。 问题是,这只会给我提供存储包的目录-即,如果我有一个存储在“ ”中的类,它将只给我“ ”,而忽略了实际存在的包名称。 有什么建议? 编

  • 我正在寻找一种方法来返回嵌套在泛型类中的枚举类型。我的意思是: 换句话说,我的方法应该返回嵌套在泛型类型中的枚举,有没有办法在Java中实现这一点?