¿La firma del método en una clase / interfaz Java incluye su tipo de retorno?
Ejemplo:
¿Conoce Java la diferencia entre esos dos métodos?
public class Foo {
public int myMethod(int param) {}
public char myMethod(int param) {}
}
¿O tal vez solo importa el nombre del método y la lista de parámetros?
java
method-signature
faressoft
fuente
fuente
Respuestas:
Citando de Oracle Docs :
Dado que la pregunta se editó para incluir este ejemplo:
No, el compilador no notará la diferencia, ya que su firma:
myMethod(int param)
es la misma. La segunda línea:le dará un error: el método ya está definido en la clase , lo que confirma aún más la declaración anterior.
fuente
foo.bar(baz);
?En Java, no lo hace, pero en esta JVM lo hace, lo que puede generar una confusión obvia.
Lo mismo que para los métodos de clase.
Nombre del método y tipos de parámetros para Java. Por ejemplo, las anotaciones y los nombres de los parámetros no importan.
fuente
A nivel de código de bytes, el "tipo de retorno" es parte de la firma del método. Considera esto
en bytecode hay 2 métodos clone ()
solo se diferencian por el tipo de retorno.
fuente
No, no en Java. El nombre del método y la lista de parámetros son solo para la firma del método . El tipo de devolución no incluye.
fuente
La especificación del lenguaje Java dice
por lo tanto, No, el tipo de retorno no es parte de la firma del método.
fuente
En JAVA y muchos otros lenguajes, puede llamar a un método sin una variable para mantener el valor de retorno. Si el tipo de retorno es parte de la firma de un método, no hay forma de saber qué método se llamará al llamar sin especificar la variable que contiene el valor de retorno.
fuente
Hermano, en Java, solemos llamar a los métodos por su nombre y sus parámetros solo para usarlos en nuestro código, como
myMethod (20, 40)
Entonces, JAVA solo busca cosas similares que coincidan en su declaración correspondiente (nombre + parámetro), es por eso que la firma del método solo incluye el nombre y los parámetros del método. :)
fuente
La firma del método es solo el nombre y la lista de parámetros.
fuente
no, en Java la firma del método no incluye el tipo de retorno, pero la declaración sí.
editado en base a los comentarios a continuación :)
fuente
String method( String s )
yDouble method( String s )
en la misma clase, por ejemplo.method signature
conmethod declaration
El tipo de retorno no se incluye en la firma del método. Solo el nombre del método y los parámetros se definen como firma del método.
Refiérase: 'Métodos de definición' de Oracle Docs
fuente
Usando AspectJ (org.aspectj.lang.reflect.MethodSignature), tiene el tipo de retorno
fuente
LA FIRMA DEL MÉTODO INCLUYE EL TIPO DE DEVOLUCIÓN.
El compilador lo ignora cuando tiene que buscar duplicados. Para Java, es ilegal tener dos métodos con la firma que difieran solo por el tipo de retorno.
Trata eso:
Construya el proyecto, vaya al directorio bin, copie Caller.cass en algún lugar. Luego cambia el método llamado:
Construya el proyecto, verá que tanto Called.class como Caller.class tienen una nueva marca de tiempo. Reemplace la Caller.class anterior y ejecute el proyecto. Tendrás una excepción:
fuente
La firma del método es solo el nombre y los parámetros del método. Pero creo que su ejemplo generará un error si estuvieran en la misma clase. Simplemente puede probarlo en cualquier ide y ver que el compilador arrojará un error
fuente
Si intenta ejecutar el código que ha mencionado en eclipse, tendrá una respuesta sobre qué elementos busca el compilador de Java para diferenciar entre los métodos de Java:
El error arrojado es: Método duplicado myMethod (int) en tipo Foo.
fuente