Java中的方法签名是否包含返回types?
Java类/接口中的方法签名是否包含其返回types?
例:
Java是否知道这两种方法之间的区别:
public class Foo { public int myMethod(int param) {} public char myMethod(int param) {} }
或者,也许只有方法名称和参数列表是重要的?
从Oracle Docs引用:
定义:方法声明的两个组件包括方法签名 – 方法名称和参数types。
由于这个问题被编辑成包含这个例子:
public class Foo { public int myMethod(int param) {} public char myMethod(int param) {} }
不,编译器将不会知道它们的签名: myMethod(int param)
是相同的。 第二行:
public char myMethod(int param) {}
会给你的错误: 方法已经在类中定义了 ,这进一步证实了上面的说法。
Java中的类方法签名是否包含返回types?
在Java中,它不会在这个JVM中执行,这会导致明显的混淆。
Java中的接口方法签名是否包含返回types?
和甲类一样。
还是只有方法名称和参数列表?
Java的方法名称和参数types。 例如,参数注释和名称无关紧要。
没有没有在Java中。 方法名称和参数列表仅用于方法签名 。 返回types不包括。
Java语言规范说
方法名和参数列表是方法签名的一部分,因此No,返回types不是方法签名的一部分
。
在字节码级别,返回types是方法签名的一部分。 考虑这个
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
他们只有返回types不同。
兄弟,在java中,我们用它们的名称和参数来调用方法,只是在我们的代码中使用它们
myMethod(20,40)
所以,JAVA只在其相应的声明(名称+参数)中search类似的东西匹配,这就是为什么方法签名只包含方法的名称和参数。 🙂
方法签名只是名称和参数列表。
不,在Java中,方法签名不包括返回types,但声明的确如此。
public String getString(String myString) ^access modifier ^return type ^name ^parameter type and name
根据以下反馈编辑:)
在JAVA和许多其他语言中,你可以调用一个没有variables的方法来保存返回值。 如果返回types是方法签名的一部分,则无法知道调用哪个方法时不指定variables保持返回值。
使用AspectJ(org.aspectj.lang.reflect.MethodSignature),它具有返回types
返回types不包含在方法签名中。只有方法名称和参数被定义为方法签名。
Reffer: Oracle Docs的“定义方法”
方法签名只是方法的名称和参数。 但是我相信你的例子如果他们在同一个class上就会产生一个错误。 你可以在任何IDE上简单的testing一下,看看编译器会抛出一个错误
方法签名包括返回types。
当必须检查重复项时,编译器会忽略它。 对于Java来说,有两种签名只有返回types不同的方法是非法的。
尝试一下:
public class Called { public String aMethod() { return ""; } } public class Caller { public static void main(String[] main) { aMethod(); } public static void aMethod() { Called x = new Called(); x.aMethod(); } }
build立项目,进入bin目录,在某处复制Caller.cass 。 然后改变被调用的方法:
public int aMethod() { return 0; }
构build项目,你会看到Called.class和Caller.class都有一个新的时间戳。 replace上面的Caller.class并运行该项目。 你会有一个例外:
java.lang.NoSuchMethodError: it.prova.Called.aMethod()Ljava/lang/String;