2014-06-18 12 views
21

Was ist receiver Parameter in Java? Java 8 Language Specification spricht über this.Warum können wir 'this' als Instanzmethodenparameter verwenden?

+5

Nur gefunden in http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.1. Es ist unklar, was das OP braucht mehr als die JLS sagt, aber jede Antwort wird wahrscheinlich nur umschreiben. –

+0

[Von JLS] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.1), ist es ein formaler Parameter? Oder ich missverstehe es? – Christian

+2

Ich würde sagen, die Frage ist ziemlich klar. – olovb

Antwort

27

Die JLS gibt a hint:

So oder so, die Empfängerparameter der Typ des dargestellten Objekts nur zu erlauben, besteht im Quellcode bezeichnet werden, so dass der Typ mit Anmerkungen versehen werden kann.

Diese beiden Methoden sind äquivalent:

class Test { 
    void m1() { } 
    void m2(Test this) { } 
} 

jedoch letztere Sie Anmerkungen hinzufügen können:

void m2(@MyAnnotation Test this) { } 
//where MyAnnotation can be defined like this for example: 
@Target(ElementType.TYPE_USE) @interface MyAnnotation {} 
+2

Ein anderes Beispiel ist in http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e14278 angegeben, wo während des Aufbaus keine umschließende Instanz des äußeren Typs verfügbar ist –

7

Empfängerparameter erlauben Argumente zu übergeben und weitere Informationen von diesen Argumenten zu extrahieren. Der einzige Zweck des expliziten Schreibens des Empfängers besteht darin, es zu ermöglichen, den Typ des Empfängers zu kommentieren. Wenn Sie nun die Schnittstelle AnnotatedElement implementieren, können Sie die Methode getAnnotation() Ihrer Klasse aufrufen, um einen Annotationstyp zu erhalten. Weitere Informationen erhalten Sie unter this.

Verwandte Themen