当您编写无法访问的代码时,Java 编译器会发出警告。例如
public void go()
{
return;
System.out.println("unreachable");
}
但是,当您在匿名类中定义无法从任何地方访问的新方法时,编译器不会提示。它允许你这样做,为什么? 例如,
class A
{
public void go()
{
System.out.println("reachable - A");
}
}
class B
{
public static void main(String [] args)
{
A a = new A() {
public void go()
{
System.out.println("reachable - B");
}
public void foo()
{
System.out.println("unreachable - B");
}
};
a.go(); // valid
a.foo(); // invalid, compiler error
}
}
最佳答案
首先:Eclipse 确实通知我 foo()
从未在本地使用。然而,由于其他答案指出的原因,这是一个警告而不是错误。
请注意,有一种方法可以到达 foo()
:
new A() {
public void go()
{
System.out.println("reachable - B");
}
public void foo()
{
System.out.println("unreachable - B");
}
}.foo();
这是可行的,因为表达式 new A() {}
的类型不是 A
,而实际上是 A
的匿名子类。该子类有一个公共(public) foo
方法。
由于不能拥有相同类型的变量,因此无法从变量中以这种方式访问 foo()
。
关于java匿名内部类无法访问的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4756633/