我的类A有如何获得具有反射的类的数组字段?
AClaz[] rofl;
为getDeclaredFields文档说“如果类或接口声明任何字段此方法返回长度为0的数组,或者如果该类对象表示一个基本类型,数组类,或无效。“
我想使用反射访问AClaz类型的rofl数组。即使AClaz是A级的内部类。
所以我会做getDeclaredClass?
我的类A有如何获得具有反射的类的数组字段?
AClaz[] rofl;
为getDeclaredFields文档说“如果类或接口声明任何字段此方法返回长度为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")
。然后,一旦你有外地的情况下,你可以访问使用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
}
}
啊哈我看到!即使在roflField数组类型是内部类时它也能工作?至少要读取它的值?我可以做roflField.get(instance).doAclazMethod()吗? – rapadura
@AntonioP:没有,因为'roflField.get()''返回Object'。您需要将其转换为正确的类型('Aclaz []'),然后从中选择一个元素。例如:'Aclaz [] values =(Aclaz [])field.get(instance);值[0] .doSomething();' –
感谢的人!我现在明白了。 – rapadura