Frage

Warum Rückgabetyp einer Methode wird nicht in Verfahren Überlastung in Betracht gezogen? Kann jemand erklären, wie Compiler prüft, ob überladene Methoden?

War es hilfreich?

Lösung

  

Warum Rückgabetyp einer Methode wird nicht in Verfahren Überlastung betrachtet?

Der Hauptgrund dafür ist, dass, wenn Sie haben dies berücksichtigen, viele Funktionsaufrufe mehrdeutig werden, wenn der Rückgabewert nicht zu etwas zugewiesen wird. Zum Beispiel, der Funktionsaufruf aufgerufen wird hier?

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.

Es gibt noch andere Gründe, nicht wollen, dies zu tun, auch. Wie gesagt, viele Sprachen tun erlauben, ihre Unterschriften nur in Rückgabetyp zu unterscheiden; Haskell und Perl sind zwei Beispiele. Wenn Ihre Sprache dies zulässt, ist es nicht schwer zu sehen, dass alles, was Sie brauchen würde, unterstützen dies ein weiterer Schritt in Ihrer Methode auflösender Prozess ist: einfach eine offensichtliche Art und Weise für den Compiler eine oder andere Methode zu wählen. In dem obigen Beispiel würden wir vielleicht eine Priorität definieren (vielleicht die erste Methode definiert ist derjenige, der gewinnt, zum Beispiel, so dass unsere x() Anruf String x() aufrufen würde).

Eine andere Sache zu beachten ist, dass die JVM nicht erlauben zwei Methoden, deren Signatur unterscheidet sich nur in den Rückgabetyp zu existieren. (Das ist, wie Scala und andere JVM Sprachen, die dies tun sie unterstützen.

Andere Tipps

  

Kann jemand erklären, wie Compiler prüft, ob überladene Methoden?

Die Java Language Specification, Abschnitt 8.4.9, enthält die endgültige (aber sehr technisch) Antwort: http://java.sun.com/ docs / Bücher / JLS / third_edition / html / classes.html # 8.4.9

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top