让我们调整OuterClass代码有点更有趣的是:摆在InnerClass实例数组中:
private static InnerClass[] innerArr = { new InnerClass() };
现在你不能直接引用私有类型InnerClass另一类是试图通过反射来获得静态字段。您可以首先将其称为Object的数组。
public static void main(String[] args) throws Exception {
Class> cla = OuterClass.class;
Field innerArrRef = cla.getDeclaredField("innerArr");
innerArrRef.setAccessible(true);
Object[] innerArrValue = (Object[]) innerArrRef.get(cla);
你需要使用反射和Class对象使用InnerClas类型。
一种方法是使用OuterClass“类对象的declaredClasses属性:
Class> inner = cla.getDeclaredClasses()[0];
但是,如果有一个以上的成员类,你通过数组需要循环和寻找正确的。另一种方法是使用知识的javac会给您将InnerClass看起来像mypackage.OuterClass$InnerClass一个完全合格的类型名称:
Class> inner = cla.getClassLoader().loadClass(cla.getName() + "$InnerClass");
一旦有了将InnerClass的类的对象,你可以使用反射来访问它的领域,方法:
Field id = inner.getField("id");
System.out.println("Inner id: " + id.getInt(innerArrValue[0]));
}