Ich mache Android-Programmierung und lernte etwas über Absichten, als ich einen Konstruktor sah, der für meinen C # -geschulten Verstand funky wirkte. Der Anruf war:
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
Beide Parameter sind für mich neu. Wie gibt es ein statisches ".this" aus einem Klassennamen? Ist das eine Java-Sache oder eine Android-Sache? Ich gehe davon aus, dass es dasselbe ist, als nur "dies" zu sagen, da ich im Kontext von bin CurrentActivity
, aber ich verstehe nicht, wie das "dies" vom Klassennamen selbst abgerufen werden kann. Ebenfalls. Die ".class" scheint für die Reflexion verwendet zu werden, mit der ich in C # vertraut bin, aber jeder Einblick in diese wäre auch willkommen.
Vielen Dank.
this
ist immer die innerste Klasse.this
so sehr JavaScript ähneltthis
? Ich denke, das bekommen Sie, wenn Sie keine erstklassigen Funktionen oder Lambdas haben :-)Eins nach dem anderen:
Das erste Konstrukt wird als qualifiziert bezeichnet . Der Zweck der Syntax liegt in dem Fall, dass Sie sich in einer inneren Klasse befinden (normalerweise einer anonymen inneren Klasse) und auf die
this
der äußeren Klasse und nicht auf diethis
der (anonymen) inneren Klasse verweisen möchten . Das "qualifizierte Dies" kann nur in einem Kontext verwendet werden, in demthis
es nicht eindeutig wäre. Das Zitat des JLS "Es ist ein Fehler zur Kompilierungszeit, wenn der Ausdruck in einer Klasse oder Schnittstelle auftritt, die keine innere Klasse der Klasse T oder T selbst ist."Das zweite Konstrukt, das als a bezeichnet wird,
class literal
ist die Methode, um auf das Class-Objekt zu verweisen, das diesen Typ darstellt. Es kann in jedem Kontext verwendet werden.quelle
qualified this
Nicht desclass literal
. Ich habe meine Antwort erweitert, um dies klarer zu machen.Die Syntax "Classname.this" gilt für innere Klassen. Wenn Sie auf die einschließende Instanz vom Typ "Outerclass" verweisen möchten, tun Sie dies als "Outerclass.this".
NextActivity.class ist einfach das Class-Objekt, das die Klasse "NextActivity" beschreibt.
quelle
NextActivity.class
in Java bedeutettypeof(NextActivity)
in C #quelle
ClassName.this
wird verwendet, um auf die aktuelle Instanz einer äußeren Klasse aus einer inneren Klasse zu verweisen.quelle
wird in verschachtelten Klassen verwendet, um auf die aktuelle Instanz der einschließenden Klasse zu verweisen, da das Schlüsselwort "this" auf die Nestklasseninstanz verweist.
quelle
Es ist verwirrend , nur weil , wenn Sie "verwenden MainActivity.this " anscheinend auf die Klasse und nicht auf das Objekt verweisen. In der Realität beziehen Sie sich bei Verwendung von "this" immer auf das aktuelle Objekt, wie in der Java-Dokumentation angegeben:
https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
Es ist nur syntaktisch eigenartig.
quelle