如何访问 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 级别。
下面是编译成功的程序,但是我如何访问 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 级别。