检查Field []是否包含名称为XXX的字段

时间:2014-08-19 07:46:48

标签: java arrays reflection

我得到了一个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>)

我想知道是否有可能修复上述错误?如果没有,可能有什么替代方式?

1 个答案:

答案 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成员字段。如果您还需要查找protectedprivate字段,则可以使用Class.getDeclaredField(String name)