如何判断在内部(成员)类上使用哪个构造函数?

时间:2013-10-07 17:13:20

标签: java reflection inner-classes

内部类的反射实例化需要一个带有合成参数的构造函数,即封闭类的实例。如果内部类是静态的,那么就没有这样的构造函数。

我可以告诉一个类是使用Class.isMemberClass()方法的内部类,但是我看不出一种确定成员类是否是静态的简洁方法,这就是我期望的找出要调用的构造函数。

有一种简洁的方法可以说明吗?

2 个答案:

答案 0 :(得分:6)

请参阅Examining Class Modifiers教程。我认为这就像

Modifier.isStatic(myClass.getModifiers());

答案 1 :(得分:0)

David is correct.我只想发布你的意思

  

内部类的反射实例化需要一个构造函数   获取一个合成参数,即封闭类的实例。

像我这样的人需要尝试一下:

public class Outer {
    public String value = "outer";

    public static void main(String[] args) throws Exception {
        int modifiers = StaticNested.class.getModifiers();
        System.out.println("StaticNested is static: " + Modifier.isStatic(modifiers));

        modifiers = Inner.class.getModifiers();
        System.out.println("Inner is static: " + Modifier.isStatic(modifiers));

        Constructor constructor = Inner.class.getConstructors()[0]; // get the only one
        Inner inner = (Inner) constructor.newInstance(new Outer()); // the constructor doesn't actually take arguments
    }

    public static class StaticNested {

    }

    public class Inner {
        public Inner() {
            System.out.println(Outer.this.value);
        }
    }
}

打印

StaticNested is static: true
Inner is static: false
outer