繁体   English   中英

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

[英]Instantiate inner class object from current outer class object

我想知道以下是否在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 {

    }

}

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

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

提前致谢!

关于:

public class OuterClass {

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

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

   class InnerClass {

   }

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

所以这是不必要的:

OuterClass.InnerClass ic = this.new InnerClass();

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

InnerClass ic = new InnerClass();

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

这不行

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

但这样可以正常工作:

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

除非将Class声明为static ,否则内部类的每个实例都必须具有外部类的“连接”实例,才能进行实例化。

这不起作用:

public class Outer {
    public class Inner { 
    }
    public static void main(String[] args) {
        Inner inner = new Inner(); //compilation error
    }
}

但是,这将起作用,它不需要Outer的实例,因为使用了static关键字:

public class Outer {
    public static class Inner { 
    }
    public static void main(String[] args) {
        Inner inner = new Inner(); 
    }
}

更多信息: java内部类

上面是在外部类和外部外部类中创建Inner类对象的示例:

public class OuterClass {

public class InnerClass{

    public void myMethod(){
        System.out.println("inside inner class");
    }
}

public void myMethod(){
    System.out.println("outer class method");
    InnerClass class1 = new InnerClass();
    class1.myMethod();
}

public static void main(String[] args){
    //OuterClass.InnerClass class1 = new OuterClass().i
    OuterClass outerClassObj = new OuterClass();
    OuterClass.InnerClass innerClassObj = outerClassObj.new InnerClass();
    innerClassObj.myMethod();
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM