我得到了一个Field
类的数组:
Class<?> clazz = Class.forName(FULL_CLASS_NAME);
Field[] fields = clazz.getFields();
我想检查上面的fileds
数组是否包含名为&#34; sumUp &#34;的字段。我正在寻找一种不会遍历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>)
我想知道是否有可能修复上述错误?如果没有,可能有什么替代方式?
答案 0 :(得分:2)
您可以通过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)
。