Java 在已创建的外部类对象上访问内部类方法

Java 在已创建的外部类对象上访问内部类方法,java,inner-classes,nested-class,Java,Inner Classes,Nested Class,假设我有这样的课: class Outer { public void getOuterValue() { } class Inner { public void getInnerValue() { } } } 我知道我可以创建此类对象,如下所示: Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); 但是让我们假设我从其他方法获得这个对象: void someMetho

假设我有这样的课:

class Outer { 
   public void getOuterValue() { } 

   class Inner { 
       public void getInnerValue() { }
   } 
} 
我知道我可以创建此类对象,如下所示:

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
但是让我们假设我从其他方法获得这个对象:

void someMethodSomewhere(Outer o) { 
        // How do I call getInnerValue() here using o? 
} 
在上面的场景中,有没有一种方法可以使用“o”调用“getInnerValue”方法


请让我知道。

否。您需要有一个
内部
的实例才能对其调用方法

一个外部类的实例是不够的(它会反过来工作:内部类实例有一个对外部类实例的引用)


你不能。getInnerValue()是内部的一个方法。外部不是内部,也没有对内部的引用。当你被交给
o
时,没有办法从它导航到任何内部实例,因为没有一个与
o

相关联的实例。我尝试了“o.getInnerValue()”,但不幸的是它不起作用。@LutzHorn不,你不能这样做。Inner是一个成员实例,它需要一个Outer的实例,因此是Outer.new Inner,而不是new Outer.Inner()@Lutz Horn不,它不能工作!可能有任意数量的
internal
类型的对象,所以理论上它甚至不能工作。我明白了。所以,我想,我必须去掉内部类,并在外部类上使用方法。或者传入
internal
的实例。谢谢你的帮助。有没有办法把它和“o”联系起来?我想,如果
o
有一个Inner的实例,我可以在“Outer”中保留一个“Inner”的实例,当然可以。这与
o
拥有StringBuffer或ArrayList或其他任何东西的实例没有什么不同。描述中所写的代码不包含任何属于
o
或可从
o
访问的内部实例。是的,我希望不保留该实例,这就是为什么我没有在描述中包含该实例。谢谢你的解释!
void someMethodSomewhere(Outer o) { 
    // How do I call getInnerValue() here using o? 
}