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 Antworten

Der 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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage