java - 无法对非静态类型 MyRunnable 进行静态引用

标签 java static-methods

完整代码如下:

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());

    }

}

我的问题是:

  1. 为什么 new Thread(new MyRunnable(test)).start(); 导致错误:
    无法对非静态类型 MyRunnable 进行静态引用
  2. 术语“静态引用”指的是什么?

最佳答案

您在 Test 类中声明了 MyRunnable 类而没有使用 static 关键字,因此它是一个“内部”类。您只能在外部类的实例中实例化内部类。您正试图用静态方法实例化它,因此没有外部实例。我猜你的意图是让 MyRunnable 类成为嵌套类而不是内部类,所以你应该只将 static 关键字添加到类定义中。

关于java - 无法对非静态类型 MyRunnable 进行静态引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12452864/

相关文章:

java - 在 ColdFusion 中使用 Java 将记录 ="RECORD_FROM_RINGING"属性添加到 TwilioML XML

c# - 既然可以是非静态的,为什么还要使用静态方法呢?

java - org/codehaus/plexus/archiver/jar/JarArchiver(不支持的 major.minor 版本 49.0)- Maven 构建错误

java - MongoDB 处理 Java 插入失败

java - 如何正确调用静态方法

c# - 除了创建助手之外,创建静态方法的理想情况(现实生活中的例子)是什么?

python - Python 中@staticmethod 的意义何在?

java - 关于 Callable 接口(interface)中的 call() 方法。在call()中调用其他静态方法时,是否会阻塞并影响性能?

java - 安卓 Intent 服务 : Unable to start

java - 连接到在 Docker 中运行的 Kafka