这个问题已经在这里有一个答案:
- 爪哇- Foo类型的无封闭情况下是可访问的 5个答案
完整的代码:
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();
}
}
为什么下面的代码片段:
ThreadLocalTest test=new ThreadLocalTest();
new Thread(new MyThread(new Integer(1),test)).start();
会导致以下错误:
类型ThreadLocalTest没有外围实例访问。 必须用类型ThreadLocalTest的包封实例限定分配(egxnew A(),其中x是ThreadLocalTest的一个实例)。
核心的问题是:我要初始化静态方法内部类。 这里有两种解决方案:
使内部类作为外部类
使用像外参考:
new Thread(test.new MyRunnable(test)).start();//Use test object to create new