Mehr als eine Methode mit denselben Parametertypen in einer Klasse

8

Ich weiß, es gibt bereits mindestens eine Frage zu diesem Thema . Aber ich möchte es noch einmal fragen, denn das habe ich in der javadoc von Class#getDeclaredMethod(...) :

  

Wenn mehr als eine Methode mit denselben Parametertypen in a deklariert ist   Klasse, und eine dieser Methoden hat einen Rückgabetyp, der mehr ist   Spezifischer als alle anderen wird diese Methode zurückgegeben; Andernfalls   eine der Methoden wird willkürlich gewählt.

So betrachten die Entwickler der Reflexion in Java diesen Fall als wahrscheinlich, ist es vielleicht doch möglich, eine solche Erklärung zu machen? Oder ist es vielleicht nur veraltet?

    
Danny Lo 18.04.2016, 17:56
quelle

1 Antwort

9

Das JVM-Bytecode-Format erlaubt die Deklaration mehrerer Methoden mit demselben Namen und denselben Parametertypen, solange sich der Rückgabetyp unterscheidet, obwohl die Java -Sprache dies nicht zulässt. Das bedeutet a) andere JVM-Sprachen können davon Gebrauch machen und b) sie können für spezielle "Compiler-magische" Sprachfunktionen verwendet werden.

Am häufigsten gibt der Compiler beim Umgang mit Generika mehrere Methoden mit demselben Namen und denselben Parametertypen aus. Die JVM-Methoden-Suche basiert auf der vollständigen Übereinstimmung der Signatur und nicht nur auf den Parametertypen. Daher muss der Compiler sogenannte bridge Methoden ausgeben, die andere Methoden signaturweise überschreiben oder überschatten. Betrachten Sie dieses Beispiel:

%Vor%

Die Klasse StringFoo benötigt drei zusätzliche Bridge-Methoden, um die Interface-Methoden zu überschreiben, da sie die gleiche desc haben:

%Vor%

Die Pseudo-Modifizierer synthetic bridge sind zwei JVM-Zugriffs-Flags, die nur vom Compiler zum Markieren von automatisch generierten Methoden im Bytecode

verwendet werden

Die Methode Class#getDeclaredMethods gibt alle deklarierten Methoden zurück - einschließlich synthetischer Bridge-Methoden. Daher muss #getDeclaredMethod(String) einen auswählen, der die tatsächliche Implementierung darstellt.

    
Clashsoft 18.04.2016, 18:30
quelle

Tags und Links