如何访问 class 中的方法,该方法位于 Java 中另一个 class 的另一个方法中

How can I access a method that is inside a class that is inside another method of another class in Java

下面是编译成功的程序,但是我如何访问 class B 的 m2() 方法,它位于 class A 的 m1() 方法中。

class A{  
    public void m1()
    {
      System.out.println("A-m1"); 
        class B{
            public void m2()
            {
                System.out.println("B-m2");
            }
        }//end of class B
    }//end of m1() method
}// end of class A

简单:你不能在 class 之外(好吧,不是以合理的方式)。

B 是一个 local class - 它只存在于该方法的范围内 m1()。因此,您可以 在该方法中实例化它。因此,在 m1() 中,您可以执行简单的 B b = new B(),然后调用 b.m2()。但是在该方法之外,没有 语法 可以让您从 "get" 到 A.m1().B.m2()

好吧,您也可以使用反射在该方法外部 实例化它。你看,class的mangled名字是A$1B.class.

因此你可以使用Class.forName("AB")得到相应的class;然后,当您拥有 class A 的实例时,您可以再次使用反射来实例化该本地 class 的对象。在那种情况下,您可以调用 m2() - 再次使用反射。

但是:您甚至不应该尝试这样做。如果那个 class B 和它的方法 m2() 需要从其他地方调用,那么就不要把它变成 local class。使其成为内部 class,甚至是(非 public 可能)顶级 class.

这完全取决于范围。如果您想在 m1() 的末尾调用 m2(),只需创建一个新的 B 实例并调用该方法即可。

new B().m2()

如果你想在方法外或声明之前调用它,由于范围的原因,它不允许你。

如果是这种情况,您应该考虑将其范围提升到 class 级别。