Enthält die Methodensignatur in einer Java-Klasse / -Schnittstelle den Rückgabetyp?
Beispiel:
Kennt Java den Unterschied zwischen diesen beiden Methoden:
public class Foo {
public int myMethod(int param) {}
public char myMethod(int param) {}
}
Oder ist es vielleicht nur der Methodenname und die Parameterliste wichtig?
java
method-signature
faressoft
quelle
quelle
Antworten:
Zitieren aus Oracle Docs :
Da die Frage so bearbeitet wurde, dass sie dieses Beispiel enthält:
Nein, der Compiler wird den Unterschied nicht kennen, da seine Signatur
myMethod(int param)
dieselbe ist. Die zweite Zeile:gibt Ihnen können Fehler: Methode ist bereits in der Klasse definiert , was die obige Aussage weiter bestätigt.
quelle
foo.bar(baz);
?In Java ist dies nicht der Fall, in dieser JVM jedoch, was zu offensichtlicher Verwirrung führen kann.
Das gleiche wie für Klassenmethoden.
Methodenname und Parametertypen für Java. Zum Beispiel spielen die Parameteranmerkungen und -namen keine Rolle.
quelle
Auf Bytecode-Ebene ist "Rückgabetyp" Teil der Methodensignatur. Bedenken Sie
Im Bytecode gibt es 2 clone () -Methoden
Sie unterscheiden sich nur nach Rückgabetyp.
quelle
Nein, nicht in Java. Methodenname und Parameterliste dienen nur zur Methodensignatur . Rückgabetyp nicht enthalten.
quelle
Java Language Spec sagt
Daher ist der Rückgabetyp nicht Teil der Methodensignatur.
quelle
In JAVA und vielen anderen Sprachen können Sie eine Methode ohne Variable aufrufen, um den Rückgabewert zu speichern. Wenn der Rückgabetyp Teil einer Methodensignatur ist, kann nicht angegeben werden, welche Methode beim Aufruf aufgerufen wird, ohne dass der Rückgabewert für die Variable angegeben wird.
quelle
Bro, In Java verwenden wir Methoden, um sie nach ihrem Namen und ihren Parametern aufzurufen, nur um sie in unserem Code zu verwenden, wie z
myMethod (20, 40)
Daher sucht JAVA nur in der entsprechenden Deklaration (Name + Parameter) nach ähnlichen Übereinstimmungen. Aus diesem Grund enthält die Methodensignatur nur den Namen und die Parameter der Methode. :) :)
quelle
Die Methodensignatur ist nur der Name und die Parameterliste.
quelle
Nein, in Java enthält die Methodensignatur nicht den Rückgabetyp, die Deklaration jedoch.
bearbeitet basierend auf dem Feedback unten :)
quelle
String method( String s )
undDouble method( String s )
in der gleichen Klasse, zum Beispiel.method signature
mitmethod declaration
Der Rückgabetyp ist nicht in der Methodensignatur enthalten. Nur Methodenname und Parameter werden als Methodensignatur definiert.
Reffer: Oracle Docs 'Methoden definieren'
quelle
Bei Verwendung von AspectJ (org.aspectj.lang.reflect.MethodSignature) hat es den Rückgabetyp
quelle
DIE METHODEN-UNTERZEICHNUNG UMFASST DEN RÜCKGABETYP.
Der Compiler ignoriert es, wenn nach Duplikaten gesucht werden muss. Für Java ist es illegal, zwei Methoden zu haben, deren Signatur sich nur durch den Rückgabetyp unterscheidet.
Versuch das:
Erstellen Sie das Projekt, gehen Sie in das Verzeichnis bin und kopieren Sie die Caller.cass irgendwo hin. Ändern Sie dann die aufgerufene Methode:
Wenn Sie das Projekt erstellen, werden Sie feststellen, dass sowohl Called.class als auch Caller.class einen neuen Zeitstempel haben. Ersetzen Sie die Caller.class oben und führen Sie das Projekt aus. Sie haben eine Ausnahme:
quelle
Die Methodensignatur ist nur der Name und die Parameter der Methode. Aber ich glaube, Ihr Beispiel wird einen Fehler erzeugen, wenn sie in derselben Klasse wären. Sie können es einfach auf jeder Idee testen und sehen, dass der Compiler einen Fehler auslöst
quelle
Wenn Sie versuchen, den Code auszuführen, den Sie in Eclipse erwähnt haben, erhalten Sie eine Antwort darauf, nach welchen Elementen der Java-Compiler sucht, um zwischen Java-Methoden zu unterscheiden:
Der Fehler lautet: Doppelte Methode myMethod (int) vom Typ Foo.
quelle