Methodenüberladung und Generika

8

Java zieht bei der Auswahl der überladenen Methode normalerweise normale Methoden zu allgemeinen Methoden vor, was die folgenden sscce generieren könnte:

%Vor%

Ausgabe:

%Vor%

Gibt es eine Möglichkeit, Java zu zwingen, die generische Version zu verwenden?

    
durron597 19.06.2013, 13:04
quelle

4 Antworten

3

Nein, nicht zu kurz, um die spezifischere Überladung zu löschen oder zu verbergen. Wenn sie sich jedoch anders verhalten, sollten sie einfach andere Namen haben. Und wenn sie sich gleich verhalten, sollte das egal sein.

    
Ben Schulz 19.06.2013, 13:12
quelle
1

Ein Ansatz, den ich gesehen habe, ist, einen Dummy-Parameter zu der weniger häufig verwendeten Methode hinzuzufügen:

%Vor%

nennt es wie

%Vor%

aber ansonsten

%Vor%

ruft die generische Methode auf.

    
kuporific 19.06.2013 13:11
quelle
1

Mit generischen Methoden können Typparameter verwendet werden, um Abhängigkeiten zwischen den Typen eines oder mehrerer Argumente für eine Methode und / oder deren Rückgabetyp auszudrücken. Wenn es keine solche Abhängigkeit gibt, sollte eine generische Methode nicht verwendet werden.

(aus hier )

    
davek 19.06.2013 13:13
quelle
1
  

Gibt es eine Möglichkeit, Java zu zwingen, die generische Version zu verwenden?

Nicht ohne Entfernen, Umbenennen oder anderes Ändern der Signatur der zweiten Methode. (Wenn Sie wirklich hacky werden wollen - tun Sie das nicht - benutzen Sie reflection, um die Methode aufzurufen.) Das liegt daran, dass Javas Overload-Resolution-Verfahren versucht Wählen Sie die spezifischste Methode aus.

  

15.12.2.5. Die spezifischste Methode auswählen

     

Wenn mehrere Methoden gleichzeitig verfügbar und auf einen Methodenaufruf anwendbar sind, müssen Sie einen auswählen, um den Deskriptor für den Laufzeitmethodenversand bereitzustellen. Die Java-Programmiersprache verwendet die Regel, dass die spezifischste Methode gewählt wird.

     

Die informelle Intuition ist, dass eine Methode spezifischer ist als eine andere, wenn jeder Aufruf, der von der ersten Methode behandelt wird, ohne einen Kompilierzeitfehler an die andere weitergegeben werden kann.

    
Matt Ball 19.06.2013 13:11
quelle

Tags und Links