java No enclosing instance of type MyThread is available due to some intermediate constructor invocation
时间: 2024-05-07 18:21:47 浏览: 105
这个错误通常出现在使用内部类时,因为内部类需要通过外部类的实例来访问其成员。在这种情况下,可能是在内部类的构造函数中调用了外部类的构造函数,但是这个构造函数中没有创建外部类的实例,导致内部类无法访问外部类的成员。
要解决这个问题,可以在内部类的构造函数中添加一个外部类的实例,或者将内部类定义为静态的。如果你需要在内部类中访问外部类的成员,可以将这些成员声明为 final 或使用 getter 和 setter 方法来访问它们。
下面是一个例子,展示了如何通过添加外部类的实例来解决这个问题:
```
public class MyThread {
private String name;
public MyThread(String name) {
this.name = name;
}
public void start() {
new Thread(new MyRunnable()).start();
}
private class MyRunnable implements Runnable {
private MyThread myThread;
public MyRunnable() {
this.myThread = MyThread.this;
}
public void run() {
System.out.println(myThread.name + " is running");
}
}
}
```
在这个例子中,我们在 MyRunnable 的构造函数中添加了一个外部类的实例,以便在内部类中访问外部类的成员。
阅读全文