Was ist receiver
Parameter in Java? Java 8 Language Specification spricht über this
.Warum können wir 'this' als Instanzmethodenparameter verwenden?
Antwort
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 {}
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 –
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.
- 1. Warum können wir nicht ‚this‘ Schlüsselwort in einer statischen Methode
- 2. Warum verwenden wir pthread_exit(), wenn wir return verwenden können?
- 3. Warum können wir C-Strings nicht als SELs verwenden?
- 4. Warum können wir nicht 192.168.1 als Subnetzmaske verwenden?
- 5. Können wir Blackberry als GSM-Modem verwenden?
- 6. Warum können wir keine ausdrucksbasierten Konstruktoren verwenden?
- 7. Warum verwenden wir Serialisierung?
- 8. Warum verwenden wir 'this->' und nicht 'this.' Zugang zu Mitgliedern?
- 9. Warum verwenden wir setLayoutParams?
- 10. Warum können wir nicht "..." umkehren?
- 11. HyperTable - Warum können wir das * in Select-Klausel nicht verwenden?
- 12. Können wir & in URL verwenden?
- 13. Warum verwenden wir HTTP?
- 14. Warum verwenden wir web.xml?
- 15. Warum verwenden wir den TaskStackBuilder?
- 16. Können wir ember-cli rein als Frontend verwenden wie wir javascript und jquery verwenden?
- 17. Können wir git-cvs unter Windows verwenden?
- 18. Kompilieren $ (this) als $ (_ this)
- 19. Können wir in Mapreduce den Combiner als Ersatz verwenden?
- 20. Können wir den Schlüssel als IV für AES verwenden?
- 21. Wie können wir Array-Elemente als Zähler in Java verwenden?
- 22. Können wir die neue BottomNavigationBar als temporäre Snackbar verwenden?
- 23. Können wir Funktion als Return-Anweisung in Javascript verwenden?
- 24. Warum können wir die Prozess-ID nicht verwenden, um den Port zu verwenden, den wir binden?
- 25. C#: Warum verwenden Generika nicht den allgemeinsten Typ, den wir verwenden können, wenn wir keinen angeben?
- 26. Warum verwenden wir abroll segue, wenn wir Segmente verwenden können, um zu einem View-Controller zurückzukehren?
- 27. Warum können wir keinen Doppelzeiger verwenden, um zweidimensionale Arrays darzustellen?
- 28. Warum können wir eine CFG nicht zum Scannen/Tokenisieren verwenden?
- 29. Können wir scroll-Ereignis für Div verwenden?
- 30. Warum können wir nicht "Char" enum Typen
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. –
[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
Ich würde sagen, die Frage ist ziemlich klar. – olovb