java匿名内部类无法访问的代码

标签 java inner-classes unreachable-code

当您编写无法访问的代码时,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/

相关文章:

Java 作用域和生命周期(内部类)

java - 通过名称创建内部静态类实例

c++ - 内部类和封闭类分开定义

c++ - 构造函数右括号处的无法访问的代码

c - gcc 报告 "will never be executed"关于行 : while(fgets(line, MAX_LINE, stdin) != NULL)

Java PaintComponent 的大小和位置在扩展 Jpanel 的抽象类的子类中

java - 是否有与嵌套类关联的构造函数

java - 为什么 Java 编译器不会为无法访问的 then 语句生成无法访问的语句错误?

java - 导入扫描仪时必须声明一个命名包

java - 为什么这个变量会受到影响?