A assinatura do método em uma classe / interface Java inclui seu tipo de retorno?
Exemplo:
Java sabe a diferença entre esses dois métodos:
public class Foo {
public int myMethod(int param) {}
public char myMethod(int param) {}
}
Ou talvez apenas o nome do método e a lista de parâmetros importem?
java
method-signature
faressoft
fonte
fonte
Respostas:
Citando do Oracle Docs :
Já que a pergunta foi editada para incluir este exemplo:
Não, o compilador não saberá a diferença, pois sua assinatura:
myMethod(int param)
é a mesma. A segunda linha:lhe dará um erro: o método já está definido na classe , o que confirma ainda mais a afirmação acima.
fonte
foo.bar(baz);
?Em Java, não, mas neste JVM ele faz, o que pode levar a uma confusão óbvia.
O mesmo que para métodos de classe.
Nome do método e tipos de parâmetro para Java. Por exemplo, as anotações e nomes dos parâmetros não importam.
fonte
No nível do bytecode, o "tipo de retorno" faz parte da assinatura do método. Considere isto
no bytecode existem 2 métodos clone ()
eles diferem apenas pelo tipo de retorno.
fonte
Não, não em Java. O nome do método e a lista de parâmetros são apenas para assinatura do método . O tipo de retorno não inclui.
fonte
A especificação da linguagem Java diz
portanto, Não, o tipo de retorno não faz parte da assinatura do método.
fonte
Em JAVA e em muitas outras linguagens, você pode chamar um método sem uma variável para conter o valor de retorno. Se o tipo de retorno for parte de uma assinatura de método, não há como saber qual método será chamado ao chamar sem especificar o valor de retorno de retenção da variável.
fonte
Bro, Em java, usamos para chamar métodos por seus nomes e seus parâmetros apenas para usá-los em nosso código, como
meu método (20, 40)
então, JAVA só procura por itens semelhantes que correspondam em sua declaração correspondente (nome + parâmetro), é por isso que a assinatura do método inclui apenas o nome e os parâmetros do método. :)
fonte
A assinatura do método é o nome e a lista de parâmetros apenas.
fonte
não, em Java a assinatura do método não inclui o tipo de retorno, mas a declaração sim.
editado com base no feedback abaixo :)
fonte
String method( String s )
e estarDouble method( String s )
na mesma classe, por exemplo.method signature
commethod declaration
O tipo de retorno não inclui a assinatura do método. Somente o nome do método e os parâmetros são definidos como assinatura do método.
Refferir: 'Métodos de definição' do Oracle Docs
fonte
Usando AspectJ (org.aspectj.lang.reflect.MethodSignature), ele tem o tipo de retorno
fonte
A ASSINATURA DO MÉTODO INCLUI O TIPO DE RETORNO.
O compilador o ignora quando precisa verificar se há duplicatas. Para Java é ilegal ter dois métodos com a assinatura diferindo apenas pelo tipo de retorno.
Tente isso:
Compile o projeto, vá para o diretório bin, copie o Caller.cass em algum lugar. Em seguida, altere o método chamado:
Construa o projeto, você verá que Called.class e Caller.class têm um novo carimbo de data / hora. Substitua o Caller.class acima e execute o projeto. Você terá uma exceção:
fonte
A assinatura do método é apenas o nome e os parâmetros do método. Mas acredito que seu exemplo geraria um erro se eles estivessem na mesma classe. Você pode simplesmente testá-lo em qualquer ide e ver se o compilador lançará um erro
fonte
Se você tentar executar o código que mencionou no eclipse, terá uma resposta sobre quais elementos o compilador java procura para diferenciar entre os métodos java:
O erro gerado é: Método duplicado myMethod (int) no tipo Foo.
fonte