如何通过反射获取类的Array字段?

rap*_*ura 1 java arrays reflection

我的A班了

   AClaz[] rofl;
Run Code Online (Sandbox Code Playgroud)

getDeclaredFields的文档说:"如果类或接口没有声明字段,或者此Class对象表示基本类型,数组类或void ,则此方法返回长度为0 的数组."

我想使用反射访问AClaz类型的rofl数组.即使AClaz是A类的内部类.

所以我会做getDeclaredClass?

Jon*_*eet 5

你误读的文档-它在谈论呼吁getDeclaredFields 一个数组类,像这样:

Class<?> arrayClass = String[].getClass();
Field[] fields = arrayClass.getDeclaredFields();
Run Code Online (Sandbox Code Playgroud)

您应该能够A毫无问题地使用该字段

Field[] fields = A.class.getDeclaredFields();
Run Code Online (Sandbox Code Playgroud)

然后迭代数组,或

Field roflField = A.class.getDeclaredField("rofl");
Run Code Online (Sandbox Code Playgroud)

字段类型是数组的事实根本不是问题.

  • @AntonioP:不,因为`roflField.get()`返回`Object`.你需要转换为正确的类型(`Aclaz []`),然后从中选择一个元素.例如:`Aclaz [] values =(Aclaz [])field.get(instance); 值[0] .doSomething();` (3认同)