Existe-t-il un moyen d'accéder à une classe externe anonyme? Une classe normale peut être accédée par ClassName.this. Cela ne fonctionne pas, car une classe anonyme n'a évidemment pas de nom. J'ai également essayé d'utiliser la classe/interface étendue (comme Runnable.this) mais cela ne semble pas fonctionner de cette façon.Accéder à la classe externe anonyme sans stocker dans la variable?
Je suis sûr que ce n'est peut-être pas le meilleur style de codage, je suis juste curieux de savoir si c'est possible sans stocker cela de l'extérieur dans une variable.
exemple, méfiez-outer.this:
public class A
{
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
new Thread(new Runnable() {
@Override
public void run() {
synchronized (outher.this) {
outher.this.notify();
}
}
}).start();
try {
synchronized (this) {
wait();
}
} catch (final InterruptedException ex) {}
}
}).start();
}
}
pensez-vous qu'il fonctionnera avec synchronized (this.getClass(). GetEnclosingClass()) avec des classes anonymes? –
@ Eric R. Je pense que cela ferait quelque chose de différent de ce que DiddiZ a publié (peut-être que ce que vous proposez est ce que DiddiZ veut vraiment). Supposons que la méthode 'main' était exécutée simultanément dans de nombreux threads différents. Dans le code de DiddiZ, ils seraient tous synchrones sur différents objets - donc pas de conflit. Dans votre code, ils seraient tous synchrones sur le même objet, donc il y aurait un conflit. Mais je soupçonne que votre code est ce que DiddiZ veut vraiment. – emory
Ceci est synchronisé par classe, pas par instance. Si change synchronization surveille à synchronized (this.getClass(). GetEnclosingClass()) et synchronized (this.getClass()) (au lieu de synchronized (this)) cela fonctionnera. Mais si vous exécutez plusieurs threads sur les mêmes instances Runnable, cela sera comme une synchronisation statique, c'est-à-dire sur toutes les instances. –