kio*_*oto 2 java inner-classes unreachable-code
编写无法访问的代码时,Java编译器会抱怨.例如
public void go()
{
return;
System.out.println("unreachable");
}
Run Code Online (Sandbox Code Playgroud)
但是,当您在匿名类中定义一个无法从任何地方访问的新方法时,编译器不会抱怨.它允许你这样做,为什么?例如,
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
}
}
Run Code Online (Sandbox Code Playgroud)
这只相当于允许你创建私有方法,这些方法在类中的任何地方都没有被调用.这是完全不同的代码 - 并且可以通过反射访问它.
这是可以合理地发出警告的事情(特别是在允许非常细粒度调整警告的IDE上),但我不认为这应该是一个错误.
首先:Eclipse 确实通知我foo()从未在本地使用过.然而,由于其他anserws指出的原因,这是一个警告,而不是错误.
请注意,有一种方法可以达到foo():
new A() {
public void go()
{
System.out.println("reachable - B");
}
public void foo()
{
System.out.println("unreachable - B");
}
}.foo();
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为表达式的类型new A() {}不是A,但实际上是匿名的子类A.那个子类有一个公共foo方法.
由于您不能拥有相同类型的变量,因此无法foo()从变量访问此方法.
| 归档时间: |
|
| 查看次数: |
884 次 |
| 最近记录: |