Auf keine umschließende Instanz des Typs kann zugegriffen werden. [Duplikat]
Diese Frage hat hier bereits eine Antwort:
Java - Auf keine umschließende Instanz vom Typ Foo kann zugegriffen werden 5 AntwortenDer gesamte Code lautet:
public class ThreadLocalTest {
ThreadLocal<Integer> globalint = new ThreadLocal<Integer>(){
@Override
protected Integer initialValue() {
return new Integer(0);
}
};
public class MyThread implements Runnable{
Integer myi;
ThreadLocalTest mytest;
public MyThread(Integer i, ThreadLocalTest test) {
myi = i;
mytest = test;
}
@Override
public void run() {
System.out.println("I am thread:" + myi);
Integer myint = mytest.globalint.get();
System.out.println(myint);
mytest.globalint.set(myi);
}
}
public static void main(String[] args){
ThreadLocalTest test = new ThreadLocalTest();
new Thread(new MyThread(new Integer(1), test)).start();
}
}
Warum das folgende Snippet:
ThreadLocalTest test=new ThreadLocalTest();
new Thread(new MyThread(new Integer(1),test)).start();
verursachen den folgenden Fehler:
Auf keine umschließende Instanz des Typs ThreadLocalTest kann zugegriffen werden. Die Zuordnung muss mit einer umschließenden Instanz des Typs ThreadLocalTest qualifiziert werden (z. B. x.new A (), wobei x eine Instanz von ThreadLocalTest ist).
Das Kernproblem ist, dass: Ich möchte die innere Klasse in den statischen Methoden initialisieren. Hier sind zwei Lösungen:
mache die innere Klasse zur äußeren Klasse
benutze äußere Referenz wie:
new Thread(test.new MyRunnable(test)).start();//Use test object to create new