Java类/接口中的方法签名是否包含其返回类型?
例子:
Java是否知道这两种方法之间的区别:
public class Foo {
public int myMethod(int param) {}
public char myMethod(int param) {}
}
或者可能只有方法名和参数列表才重要?
在字节码级别,“返回类型”是方法签名的一部分。考虑一下这个
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
它们仅在返回类型上有所不同。
Java中的类方法签名是否包含返回类型?
在Java,它没有,但在这个JVM中它有,这可能会导致明显的混乱。
接口方法签名是否在Java包括返回类型?
与类方法相同。
还是仅方法名称和参数列表?
Java的方法名称和参数类型。例如,参数注释和名称并不重要。
引用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中实现这一点?