内部类的反射实例化需要一个带有综合参数的构造函数,即封闭类的实例。如果内部类是静态的,那么就没有这样的构造函数。
我可以使用Class.isMemberClass()方法判断一个类是一个内部类,但是我看不到一种确定成员类是否为静态的简洁方法,这就是我期望的方式调用哪个构造函数。
有没有一种巧妙的方式来告诉?
内部类的反射实例化需要一个带有综合参数的构造函数,即封闭类的实例。如果内部类是静态的,那么就没有这样的构造函数。
我可以使用Class.isMemberClass()方法判断一个类是一个内部类,但是我看不到一种确定成员类是否为静态的简洁方法,这就是我期望的方式调用哪个构造函数。
有没有一种巧妙的方式来告诉?
请参阅检查类修饰符教程。我认为这有点像
Modifier.isStatic(myClass.getModifiers());
大卫是对的。我只是要发布你的意思
内部类的反射实例化需要一个带有综合参数的构造函数,即封闭类的实例。
对于像我这样需要尝试的人:
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