La signature de méthode dans une classe / interface Java inclut-elle son type de retour?
Exemple:
Java connaît-il la différence entre ces deux méthodes:
public class Foo {
public int myMethod(int param) {}
public char myMethod(int param) {}
}
Ou est-ce seulement le nom de la méthode et la liste des paramètres qui comptent?
java
method-signature
faressoft
la source
la source
Réponses:
Citations d' Oracle Docs :
Puisque la question a été modifiée pour inclure cet exemple:
Non, le compilateur ne connaîtra pas la différence, car leur signature:
myMethod(int param)
est la même. La deuxième ligne:vous donnera peut erreur: la méthode est déjà définie dans la classe , ce qui confirme davantage l'instruction ci-dessus.
la source
foo.bar(baz);
?En Java, ce n'est pas le cas, mais dans cette JVM, c'est le cas, ce qui peut conduire à une confusion évidente.
La même chose que pour les méthodes de classe.
Nom de méthode et types de paramètres pour Java. Par exemple, les annotations et les noms des paramètres n'ont pas d'importance.
la source
Au niveau du bytecode, le "type de retour" fait partie de la signature de méthode. Considère ceci
dans bytecode il y a 2 méthodes clone ()
ils diffèrent uniquement par le type de retour.
la source
Non pas en Java. Le nom de la méthode et la liste des paramètres sont uniquement destinés à la signature de méthode . Le type de retour n'inclut pas.
la source
Spécification du langage Java dit
donc Non, le type de retour ne fait pas partie de la signature de la méthode.
la source
En JAVA et dans de nombreux autres langages, vous pouvez appeler une méthode sans variable pour contenir la valeur de retour. Si le type de retour fait partie d'une signature de méthode, il n'y a aucun moyen de savoir quelle méthode sera appelée lors de l'appel sans spécifier la variable contenant la valeur de retour.
la source
Bro, En java, nous utilisons pour appeler des méthodes par leur nom et leurs paramètres uniquement pour les utiliser dans notre code, comme
myMethod (20, 40)
Ainsi, JAVA ne recherche que des éléments similaires correspondant dans leur déclaration correspondante (nom + paramètre), c'est pourquoi la signature de méthode inclut uniquement le nom et les paramètres de la méthode. :)
la source
La signature de la méthode est uniquement le nom et la liste des paramètres.
la source
non, en Java, la signature de méthode n'inclut pas le type de retour, mais la déclaration le fait.
édité en fonction des commentaires ci-dessous :)
la source
String method( String s )
etDouble method( String s )
dans la même classe, par exemple.method signature
avecmethod declaration
Le type de retour n'inclut pas la signature de méthode. Seuls le nom de la méthode et les paramètres sont définis comme signature de méthode
Référence: Oracle Docs 'Defining Methods'
la source
En utilisant AspectJ (org.aspectj.lang.reflect.MethodSignature), il a le type de retour
la source
LA SIGNATURE DE LA MÉTHODE INCLUT LE TYPE DE RETOUR.
Le compilateur l'ignore lorsqu'il doit vérifier les doublons. Pour Java, il est illégal d'avoir deux méthodes dont la signature ne diffère que par le type de retour.
Essayez ça:
Construisez le projet, allez dans le répertoire bin, copiez le Caller.cass quelque part. Puis changez la méthode appelée:
Générez le projet, vous verrez que Called.class et Caller.class ont un nouvel horodatage. Remplacez le Caller.class ci-dessus et exécutez le projet. Vous aurez une exception:
la source
La signature de la méthode est uniquement le nom et les paramètres de la méthode. Mais je crois que votre exemple générera une erreur s'ils appartenaient à la même classe. Vous pouvez simplement le tester sur n'importe quel ide et voir que le compilateur lancera une erreur
la source
Si vous essayez d'exécuter le code que vous avez mentionné sur eclipse, vous aurez une réponse sur les éléments que le compilateur java recherche pour différencier les méthodes java:
L'erreur générée est: Dupliquer la méthode myMethod (int) dans le type Foo.
la source