Domanda

Perché tipo di ritorno di un metodo non è presa in considerazione in overloading dei metodi? Qualcuno può spiegare, come controlli compilatore per metodi di overload?

È stato utile?

Soluzione

  

Perché tipo di ritorno di un metodo non è presa in considerazione in overloading dei metodi?

Il motivo principale è che se si ha considerano questo, un sacco di chiamate di funzione diventano ambigue se il valore di ritorno non è assegnato a qualcosa. Per esempio, che chiamata di funzione sia invocata qui?

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.

Non ci sono altre ragioni per non voler fare anche questo. Detto questo, molte lingue do permettono ai loro firme per differiscono solo nel tipo di ritorno; Haskell e Perl sono due esempi. Se la vostra lingua non permette questo, non è difficile capire che tutto quello che avresti bisogno di sostenere questo è più un passo nel processo di metodo di risoluzione: semplicemente hanno un modo ovvio per il compilatore per selezionare un metodo o un altro. Nell'esempio di cui sopra, forse avremmo definire una priorità (forse il primo metodo definito è quello che vince, per esempio, quindi il nostro invito x() vorremmo richiamare String x()).

Un'altra cosa da notare è che la JVM non permettono di esistere due metodi di cui differisce solo in firma tipo di ritorno. (Ecco come Scala e altre lingue JVM che supportano questo lo fanno.

Altri suggerimenti

  

Qualcuno può spiegare, quanti controlli del compilatore per metodi di overload?

Il linguaggio Java Specification, sezione 8.4.9, conterrà la risposta definitiva (ma molto tecnico): http://java.sun.com/ docs / libri / JLS / third_edition / html / classes.html # 8.4.9

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top