Ни один экземпляр типа не доступен. [Дубликат]
На этот вопрос уже есть ответ здесь:
Java - нет включающего экземпляра типа Foo 5 ответовВесь код:
public class ThreadLocalTest {
ThreadLocal globalint = new ThreadLocal(){
@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();
}
}
почему следующий фрагмент:
ThreadLocalTest test=new ThreadLocalTest();
new Thread(new MyThread(new Integer(1),test)).start();
вызвать следующую ошибку:
Ни один включающий экземпляр типа ThreadLocalTest не доступен. Необходимо квалифицировать выделение с включающим экземпляром типа ThreadLocalTest (например, x.new A (), где x - это экземпляр ThreadLocalTest).
Основная проблема заключается в следующем: я хочу инициализировать внутренний класс в статических методах. Вот два решения:
сделать внутренний класс внешним классом
использовать внешнюю ссылку как:
new Thread(test.new MyRunnable(test)).start();//Use test object to create new