如何使用反射创建内部类对象? Inner和Outer类都有默认构造函数,不带参数
Outer class {
Inner class{
}
public void createO() {
Outer.Inner ob = new Inner ();//that works
Inner.class.newInstance(); //<--why does this not compile?
}
}
答案 0 :(得分:2)
这意味着你永远不能使用Class.newInstance
构建内部类;相反,您必须使用带有单个Outer
实例的构造函数。这是一些演示其用法的示例代码:
class Outer {
class Inner {
@Override
public String toString() {
return String.format("#<Inner[%h] outer=%s>", this, Outer.this);
}
}
@Override
public String toString() {
return String.format("#<Outer[%h]>", this);
}
public Inner newInner() {
return new Inner();
}
public Inner newInnerReflect() throws Exception {
return Inner.class.getDeclaredConstructor(Outer.class).newInstance(this);
}
public static void main(String[] args) throws Exception {
Outer outer = new Outer();
System.out.println(outer);
System.out.println(outer.newInner());
System.out.println(outer.newInnerReflect());
System.out.println(outer.new Inner());
System.out.println(Inner.class.getDeclaredConstructor(Outer.class).newInstance(outer));
}
}
(请注意,在标准Java术语中,内部类始终是非静态的。静态成员类称为嵌套类。)