Je suis actuellement à la création d'une référence explicite à cette à l'extérieur de la classe alors que j'ai un nom pour désigner dans l'anonymat intérieur de la classe. Est-il une meilleure façon de le faire?
Réponses
Trop de publicités?Je viens de trouver cette récemment. Utiliser OuterClassName.this
.
class Outer {
void foo() {
new Thread() {
public void run() {
Outer.this.bar();
}
}.start();
}
void bar() {
System.out.println("BAR!");
}
}
Mis à jour Si vous voulez juste l'objet lui-même (au lieu d'invoquer des membres), alors Outer.this
est le chemin à parcourir.
Vous pouvez toujours utiliser Outer.class pour obtenir la classe de l'extérieur de la classe de l'objet (qui reviendra de la même Classe d'objet Extérieur.c'.getClass() mais il est plus efficace)
Si vous souhaitez accéder à la statique dans la classe englobante, vous pouvez utiliser Extérieure.nom où nom est le champ statique ou de la méthode.
Je crois que, en général, vous pouvez utiliser "ce", ou tout simplement laisser complètement. Le code à l'intérieur de la classe devrait être en mesure de référence de l'extérieur de la classe des membres sans aucun problème. La seule fois où vous avez besoin d'utiliser la version plus détaillée "Extérieur.ce" s'il y a des conflits de nom. Donc, pour développer sur Frank commentaire:
class Outer {
void foo() {
new Thread() {
public void run() {
this.bar();
Outer.this.baz();
}
public void baz() { }
}.start();
}
void bar() {
System.out.println("BAR!");
}
void baz() {
System.out.println("BAZ!");
}
}