从内部匿名类访问外部匿名类的字段,是 Java 语言中的一种特性。在 Java 中,匿名类可以访问外部类的成员变量,但是不能访问外部类的局部变量。为了让外部匿名类访问内部匿名类的字段,可以将内部匿名类的字段定义为 final
类型,这样就可以在外部匿名类中访问了。
例如,以下代码展示了如何在外部匿名类中访问内部匿名类的字段:
public class OuterClass {
private int outerVar = 10;
public void outerMethod() {
final int innerVar = 20;
Runnable innerRunnable = new Runnable() {
public void run() {
System.out.println("Inner class: " + innerVar);
}
};
Runnable outerRunnable = new Runnable() {
public void run() {
System.out.println("Outer class: " + outerVar);
System.out.println("Inner class: " + innerVar);
}
};
innerRunnable.run();
outerRunnable.run();
}
}
在上面的代码中,innerVar
是一个 final
类型的变量,因此可以在外部匿名类中访问。而 outerVar
是一个普通的成员变量,可以在内部匿名类和外部匿名类中访问。
输出结果如下:
Inner class: 20
Outer class: 10
Inner class: 20
需要注意的是,在 Java 8 及以上版本中,可以使用 Lambda 表达式来简化匿名类的定义,例如:
public class OuterClass {
private int outerVar = 10;
public void outerMethod() {
final int innerVar = 20;
Runnable innerRunnable = () -> System.out.println("Inner class: " + innerVar);
Runnable outerRunnable = () -> {
System.out.println("Outer class: " + outerVar);
System.out.println("Inner class: " + innerVar);
};
innerRunnable.run();
outerRunnable.run();
}
}
在上面的代码中,innerRunnable
和 outerRunnable
都是使用 Lambda 表达式定义的匿名类,但是它们仍然可以访问外部类的成员变量和 final
类型的局部变量。
GAME-TECH
GAME-TECH
GAME-TECH
Elastic 中国开发者大会
第四期Techo TVP开发者峰会
技术创作101训练营
云+社区技术沙龙[第28期]
云+未来峰会
云+社区技术沙龙[第12期]
腾讯云GAME-TECH游戏开发者技术沙龙
云+社区技术沙龙 [第30期]
云+社区技术沙龙[第10期]
领取专属 10元无门槛券
手把手带您无忧上云