我怎么能得到一个类的反射数组字段



我的班级A有

   AClaz[] rofl;

getDeclaredFields的文档说:"如果类或接口没有声明字段,或者这个class对象表示基本类型,是数组类,或void,这个方法返回一个长度为0的数组。"

我想使用反射访问类型为AClaz的rofl数组。即使AClaz是类a的内部类

写入getDeclaredClass ?

你误读了文档-它正在谈论在上调用getDeclaredFields 一个数组类,像这样:

Class<?> arrayClass = String[].getClass();
Field[] fields = arrayClass.getDeclaredFields();

您应该能够使用

A中获得字段而没有任何问题
Field[] fields = A.class.getDeclaredFields();

,然后遍历数组,或者

Field roflField = A.class.getDeclaredField("rofl");

字段类型是一个数组,这根本不是问题。

getDeclaredFields()返回所有字段,即Field类的实例。您希望访问名为rofl的字段之一,因此可以遍历getDeclaredFields()返回的数组,也可以使用getDeclaredField("rofl")。然后,一旦您有了Field的实例,您就可以使用set()get()访问字段值本身。如果你想设置值,你必须提供正确类型的值,即AClaz数组。

如果你想改变你的类中存储在字段rofl中的现有数组的一个元素,你应该这样说:Array.set(field.get(instance), index, element)

你可以得到这样的字段…

Class<?> arrayClass = String[].getClass();
Field[] fields =  arrayClass.getDeclaredFields();
for(int i =0; i<fields.length; i++){
  if(fields[i].isArray()){
//array type fields can be checked like this
    fields[i] is array
  }
}

相关内容

  • 没有找到相关文章