最近我发现这是有效的,虽然我不指望它:
class Outer
{
Button b;
void foo() {}
void bar()
{
b = new Button();
b.setOnClickListener(new OnClickListener(){
@Override
public void OnClick()
{
foo();
}
});
}
}
我希望Outer.this.foo()是必需的,但似乎只是foo()也可以。 有人可以告诉我什么时候这个被添加到语言中? 请帮我理解确切的名称解析规则。谢谢!
问题:
1)为什么这有效?
2)如果这样做,为什么我们需要" Outer.this"语法?
答案 0 :(得分:2)
自从引入内部类以来,调用这样的方法的可能性已经存在。 Java Language Specification, Section 15.12.4.1., Compute Target Reference (If Necessary)中详细描述了解析调用方法的实例的机制。
您可能正在提到您不需要"Qualified this
"这一事实。但是这个this
主要用于在内部实例和外部实例具有相同签名的方法时解决歧义。