Je fais de la programmation Android et j'apprenais les intentions, quand j'ai vu un constructeur qui, à mon esprit formé à C #, semblait génial. L'appel était:
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
Les deux paramètres sont nouveaux pour moi. Comment y a-t-il un ".this" statique hors d'un nom de classe? Est-ce une chose Java ou une chose Android? Je suppose que c'est la même chose que de simplement dire «ceci», puisque je suis dans le contexte de CurrentActivity
, mais je ne comprends pas comment le «ceci» peut être annulé du nom de la classe lui-même. Aussi. Le ".class" semble être utilisé pour la réflexion, ce que je connais bien en C #, mais tout aperçu à ce sujet serait également le bienvenu.
Merci.
this
est toujours la classe la plus intime.this
ressemblait tellement à JavaScriptthis
? Je suppose que c'est ce que vous obtenez pour ne pas avoir de fonctions de première classe ou de lambdas :-)Un à la fois:
La première construction est appelée un ceci qualifié . Le but de la syntaxe est dans le cas où vous êtes dans une classe interne (généralement une classe interne anonyme) et que vous souhaitez référencer la
this
classe externe plutôt que lathis
classe interne (anonyme). Le "qualifié ceci" ne peut être utilisé que dans un contexte où ilthis
serait ambigu. La citation du JLS "C'est une erreur de compilation si l'expression se produit dans une classe ou une interface qui n'est pas une classe interne de la classe T ou T elle-même".La deuxième construction est appelée a
class literal
est le moyen de référencer l'objet Class qui représente ce type. Il peut être utilisé dans n'importe quel contexte.la source
qualified this
non duclass literal
. J'ai développé ma réponse pour que cela soit plus clair.La syntaxe "Classname.this" est pour les classes internes. Si vous voulez faire référence à l'instance englobante de type "Outerclass", vous le faites comme "Outerclass.this".
NextActivity.class est simplement l'objet Class qui décrit la classe "NextActivity".
la source
NextActivity.class
en java signifietypeof(NextActivity)
en C #la source
ClassName.this
est utilisé pour référencer l'instance actuelle d'une classe externe à partir d'une classe interne.la source
est utilisé dans les classes imbriquées pour faire référence à l'instance actuelle de la classe englobante, puisque le mot clé `this 'fait référence à l'instance de la classe nest.
la source
C'est déroutant uniquement parce que lorsque vous utilisez " MainActivity.this ", il semble que vous faites référence à la classe et non à l'objet. En réalité, lorsque vous utilisez "this", vous faites toujours référence à l'objet actuel, comme l'indique la documentation java se:
https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
C'est juste syntaxiquement particulier.
la source