当前位置: 首页 > 知识库问答 >
问题:

无法访问类型为的封闭实例。[副本]

司空朝
2023-03-14

整个守则是:

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

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

>

使用外部引用,如:

新线程(test.new MyRunnable(test)).start()//使用测试对象创建新的

共有1个答案

鲜于宏义
2023-03-14

如果将classMyThread更改为静态,则可以消除该问题:

public static final class MyThread implements Runnable

由于您的main()方法是静态的,因此如果不先创建封闭类的实例,就不能依赖封闭类的非静态类型或字段。不过,更好的方法是甚至不需要这样的访问,这可以通过使所讨论的类保持静态来实现。

 类似资料:
  • 我想让具有多个内部类的抽象类对其进行扩展,并可以通过静态方法创建其内部类的实例,但我得到编译器错误“无法访问ITask类型的封闭实例。必须使用ITask类型的封闭实例限定分配(例如,x.new A(),其中x是ITask的实例)。” 我发现内部类应该由外部类的实例创建,但是我的外部类有抽象方法,我不能创建它的实例。我创建了扩展父类的内部类,因为我习惯于控制它们的创建。那么有没有办法让我的模式发挥作

  • 问题内容: 我有以下代码: 我知道什么Thing也没做,但是没有它我的Hello,World程序就可以编译。只有我定义的类对我不利。 并且它拒绝编译。我到达创建新事物的路线。我猜是: 我有系统级别的问题(在DrJava或Java安装中)或 我对如何在Java中构建工作程序有一些基本的误解。 问题答案: 将使你的程序正常运行。 实际上,你已经拥有一个内部类,该内部类(根据定义)与的特定实例相关联(即

  • 我有以下代码: 我知道什么都不做,但我的Hello,World程序没有它也可以编译。只有我定义的类在我身上失败了。 它拒绝编译。我得到在创建新事物的行中。我猜: 我有系统级问题(在DrJava或我的Java安装中)或 我对如何用java构建工作程序有一些基本的误解 有什么想法吗?

  • 当我试图在Eclipse中编译/启动我的程序时,我得到了一个错误

  • 问题内容: 出于教育目的,我尝试制作一个服务器和一个客户端,其中服务器从多个客户端接收数据并回显每条消息。问题是,当我尝试让服务器一次将回显发送到所有客户端时。 我搜寻并回答了许多类似的问题,但是没有一个对我有帮助。希望你能指出我的错误。提前致谢。 问题答案: 您的嵌套类需要外部类的一个实例,因为它不是静态的-但你不 具备 外部类的一个实例。 尝试制作两个嵌套类。看起来他们无论如何都不 需要 引用

  • 我有一个叫做GreenhouseControls的类,它有很多 内置于其中的类,例如: 我从文本文件中提取值以获取事件名称(如“ThermostatNight”)和时间值(如“2000”)。为了用这些值实例化一个新对象,我构建了一个EventFactory,它接受这些值作为参数。 这是我构建的类,用于从文本文件值创建新的事件对象: 当我运行这个程序时,一切都运行得很好,直到我将EventFacto