我正在从Oracle的教程中学习local classes时考虑这种情况:
class HelloWorldApp {
public String s = "string in outer class";
public void shout() {
final String s = "string in enclosing method";
class out {
public String s = "string in local class";
public void show()
{
System.out.println(s);
System.out.println(HelloWorldApp.this.s);//reference the member of enclosing class
System.out.println(HelloWorldApp.this.shout.s)//compiler complaints
}
}
out no = new out();
no.show();
}
public static void main(String[] args) {
HelloWorldApp h = new HelloWorldApp();
h.shout();
}
}
现在,在这种情况下,我想引用方法s
的局部变量shout()
,但是教程没有说明这一点。
我已经通过Google和StackOverflow进行了搜索,但我无法找到正确的方法。
答案 0 :(得分:5)
你做不到。
JLS 6.4说:
局部变量(§14.4),形式参数(§8.4.1),异常参数(§14.20)和本地类(§14.3)只能使用简单名称(§6.2)来引用,而不是限定名称(§6.6)。
6.4.1说:
某些声明可能会在其作用域的一部分中被另一个同名声明所遮蔽,在这种情况下,简单名称不能用于引用声明的实体。
因此,您可能会使用简单的名称(6.4)来引用名称“只能”,但它会被遮蔽,因此您无法使用简单的名称(6.4.1)引用它。结论是你被困住了。