Pregunta

¿Por qué tipo de retorno de un método no se considera en la sobrecarga de métodos? ¿Puede alguien explicar, cómo cheques compilador de métodos sobrecargados?

¿Fue útil?

Solución

  

¿Por qué tipo de retorno de un método no se considera en la sobrecarga de métodos?

La razón principal es que si hicieron cuenta esto, una gran cantidad de llamadas a funciones se vuelven ambiguos si el valor de retorno no está asignado a algo. Por ejemplo, que llamada a la función se invoca aquí?

public String x() { ... }
public int x() { ... }

// ...

x();  // <-- Which one did you mean? It's impossible to tell if you
      //     allow return types to be part of method overloads.

Existen otras razones para no querer hacer esto, también. Dicho esto, muchos idiomas hacer permiten que sus firmas a sólo difieren en el tipo de retorno; Haskell y Perl son dos ejemplos. Si su idioma no permite esto, no es difícil ver que todo lo que se necesita para apoyar este es un paso más en su proceso de método de resolución: simplemente tiene una forma obvia para el compilador para seleccionar un método u otro. En el ejemplo anterior, tal vez definiríamos una prioridad (tal vez el primer método definido es el que gana, por ejemplo, por lo que nuestro llamado x() invocaríamos String x()).

Otra cosa a destacar es que la JVM hace permiten que existen dos métodos cuya firma se diferencia sólo en el tipo de devolución. (Así es como Scala y otros idiomas JVM que apoyan esta hacen.

Otros consejos

  

Puede alguien explicar, cómo compilador comprueba por métodos sobrecargados?

La especificación del lenguaje Java, la sección 8.4.9, contendrá la respuesta definitiva (pero muy técnico): http://java.sun.com/ docs / libros / JLS / third_edition / html / classes.html # 8.4.9

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top