在Java中,当你在一个嵌套类(内部类)中尝试访问其外部类(封闭类)的实例成员时,可能会遇到“无法访问Foo类型的封闭实例”的错误。这个错误通常发生在以下几种情况:
static
关键字定义的内部类,不依赖于外部类的实例。如果需要在静态内部类中访问外部类的非静态成员,可以通过以下方式:
public class OuterClass {
private int value;
public static class StaticInnerClass {
public void printValue(OuterClass outer) {
System.out.println(outer.value);
}
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.value = 10;
StaticInnerClass inner = new StaticInnerClass();
inner.printValue(outer);
}
}
如果需要在匿名内部类中访问外部类的非静态成员,可以通过以下方式:
public class OuterClass {
private int value;
public void doSomething() {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println(value);
}
};
new Thread(runnable).start();
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.value = 10;
outer.doSomething();
}
}
如果需要在局部内部类中访问外部类的非静态成员,可以通过以下方式:
public class OuterClass {
private int value;
public void doSomething() {
class LocalInnerClass {
public void printValue() {
System.out.println(value);
}
}
LocalInnerClass inner = new LocalInnerClass();
inner.printValue();
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.value = 10;
outer.doSomething();
}
}
通过以上方法,你可以解决“无法访问Foo类型的封闭实例”的问题。根据具体情况选择合适的方式即可。
领取专属 10元无门槛券
手把手带您无忧上云