不能访问封闭的类型实例。

整个代码是:

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类型的封闭实例限定分配(egxnew A(),其中x是ThreadLocalTest的实例)。


核心问题是:我想在静态方法中初始化内部类。 这里有两个解决方案:

  1. 将内部类作为外部类

  2. 使用外部引用如:

new Thread(test.new MyRunnable(test)).start();//Use test object to create new

如果将MyThread类更改为静态 ,则可以消除此问题:

 public static final class MyThread implements Runnable 

由于main()方法是静态的,因此在不首先创建封闭类的实例的情况下,不能依赖封闭类的非静态类型或字段。 但更好的是,甚至不需要这样的访问,这是通过使有问题的类静态完成的。

由于MyThread是一个内部类,你必须使用MyThreadTest实例访问它:

 public static void main(String args[]) { MyThreadTest test = new MyThreadTest(); new Thread(test.new MyThread(new Integer(1),test)).start(); }