我得到了一个类的Field
数组:
Class<?> clazz = Class.forName(FULL_CLASS_NAME);
Field[] fields = clazz.getFields();
我想检查上面的fileds
数组是否包含一个名为"sumUp"的字段。我正在寻找一种不通过fields
的每个元素迭代的方式。我试着:
String[] fieldNames = Arrays.copyOf(fields, fields.length, String.class);
boolean hasField = Arrays.asList(fieldNames).contains("sumUp"));
但是编译器报错:
The method copyOf(U[], int, Class<? extends T[]>) in the type Arrays is not applicable for the arguments (Field[], int, Class<String>)
我想知道是否有可能修复上述错误?如果没有,有什么替代方法呢?
您可以通过Class.getField(String name)
简单地通过名称获取字段:
Class<?> clazz = Class.forName(FULL_CLASS_NAME);
try {
Field f = clazz.getField("sumUp");
System.out.println("sumUp field exists");
} catch (NoSuchFieldException e){
System.out.println("sumUp field does not exist");
}
getField()
查找public
成员字段。如果您还需要查找protected
和private
字段,您可以使用Class.getDeclaredField(String name)
。