从当前外部类对象实例化内部类对象

rom*_*oqj 4 java inner-classes

我想知道以下是否在Java中有效:

class OuterClass {

    OuterClass(param1, param2) {
        ...some initialization code...
    }

    void do {
       // Here is where the doubt lays
       OuterClass.InnerClass ic = this.new InnerClass();
    }

    class InnerClass {

    }

}
Run Code Online (Sandbox Code Playgroud)

基本上我在这里想要实现的是从外部类的当前实例实例化内部类对象,而不是新实例,即当前实例.我相信这很方便,因为外部类的构造函数不为空(接受参数)而我们不知道传递给它们的是什么(它们不能为null,因为有些可能被分配给一个由内部类对象).

如果我解释得很好,请告诉我.

提前致谢!

Hov*_*els 8

关于:

public class OuterClass {

   OuterClass() {
       // ...some initialization code...
   }

   void doSomething() {
      OuterClass.InnerClass ic = this.new InnerClass();
   }

   class InnerClass {

   }
Run Code Online (Sandbox Code Playgroud)

您不需要显式的OuterClass标识符,也不需要它们,因为它们是隐含的.

所以这是不必要的:

OuterClass.InnerClass ic = this.new InnerClass();
Run Code Online (Sandbox Code Playgroud)

这在一个实例方法中很好:

InnerClass ic = new InnerClass();
Run Code Online (Sandbox Code Playgroud)

如果你在一个静态方法中创建一个InnerClass的对象,比如在OuterClass中保存的main,那么事情变得更加严峻.在那里你需要更明确:

这不行

public class OuterClass {
    public static void main(String[] args) {
       InnerClass otherInnerVar = new InnerClass(); // won't work
    }
Run Code Online (Sandbox Code Playgroud)

但这样可以正常工作:

public class OuterClass {
    public static void main(String[] args) {
       InnerClass otherInnerVar2 = new OuterClass().new InnerClass(); // will  work
    }
Run Code Online (Sandbox Code Playgroud)