获取内部类实例状态

时间:2019-03-21 06:13:35

标签: java reflection inner-classes

用例类似于下面的代码。在另一个类(Outer_Demo)中有一个类(Inner_Demo)。将在外部类私有方法中的某些条件下实例化Inner_class。

class Outer_Demo {

    public Outer_Demo() {
        test();
    }

   // private method of the outer class
   private void test() {
       Inner_Demo demo;
       if(condition)
           demo = new Inner_Demo();
   }

   // inner class
   class Inner_Demo {

   }
}

main(){
    Outer_Demo outer = new Outer_Demo();

    // Here I need to check is Inner class got instantiated
    // Trying to print the value as below leads to error create 
    // field/constant Inner_Demo in Outer_Demo
    System.out.println(Outer_Demo.Inner_Demo); // outer.Inner_Demo

   /* Storing the created instance to Outer_Demo.Inner_Demo 
   is allowed */
   Outer_Demo.Inner_Demo inst = outer.new Inner_Demo();
   System.out.println(inst);
}

我需要测试,是否实例化了内部类。我知道以上述方式调用内部类是不正确的。

如果 Outer_Demo 类的方法 test 中的字段 demo 不是本地/具有类级别的访问权限,则可能使用了

Reflection。 谁能帮我理解,有没有办法找到内部阶级的地位。与主题的任何链接都是有帮助的。谢谢。

1 个答案:

答案 0 :(得分:0)

您可能想检查该类的对象是否已实例化。

对于此任务,您应该在Inner_Demo类中声明一个Outer_Demo字段:

class Outer_Demo {

    public Outer_Demo() {
        test();
    }

Inner_Demo innerDemo;
         ...

现在,每次实例化对象时,都必须为该字段分配一个值:

innerDemo = new Inner_Demo();

最后,当您要检查对象是否存在时,只需执行以下操作:

if (innerDemo == null) {
   //object does not exist yet and has to be instantiated
} else {
   //object does exist and can be used
}