完整代码如下:
import java.util.ArrayList;
public class Test<E extends Comparable<E>>{
ThreadLocal<ArrayList<E>>arraylist=new ThreadLocal<ArrayList<E>>(){
@Override
protected ArrayList<E> initialValue() {
// TODO Auto-generated method stub
//return super.initialValue();
ArrayList<E>arraylist=new ArrayList<E>();
for(int i=0;i<=20;i++)
arraylist.add((E) new Integer(i));
return arraylist;
}
};
class MyRunnable implements Runnable{
private Test mytest;
public MyRunnable(Test test){
mytest=test;
// TODO Auto-generated constructor stub
}
@Override
public void run() {
System.out.println("before"+mytest.arraylist.toString());
ArrayList<E>myarraylist=(ArrayList<E>) mytest.arraylist.get();
myarraylist.add((E) new Double(Math.random()));
mytest.arraylist.set(myarraylist);
System.out.println("after"+mytest.arraylist.toString());
}
// TODO Auto-generated method stub
}
public static void main(String[] args){
Test test=new Test<Double>();
System.out.println(test.arraylist.toString());
new Thread(new MyRunnable(test)).start();
new Thread(new MyRunnable(test)).start();
System.out.println(arraylist.toString());
}
}
我的问题是:
- 为什么
new Thread(new MyRunnable(test)).start();
导致错误:
无法对非静态类型 MyRunnable 进行静态引用
? - 术语“静态引用”指的是什么?
最佳答案
您在 Test 类中声明了 MyRunnable 类而没有使用 static
关键字,因此它是一个“内部”类。您只能在外部类的实例中实例化内部类。您正试图用静态方法实例化它,因此没有外部实例。我猜你的意图是让 MyRunnable 类成为嵌套类而不是内部类,所以你应该只将 static 关键字添加到类定义中。
关于java - 无法对非静态类型 MyRunnable 进行静态引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12452864/