该方法将为您提供一个代表类的每个字段的 sClass.getDeclaredFields
数组。Field
您可以遍历这些并检查返回的类型Field.getType
。过滤类型List
为 to的字段List<String>
比较棘手 - 请参阅这篇文章以获得帮助。
在对所需字段进行第一次动态查找后,您应该跟踪(记忆)相关Field
对象以获得更好的性能。
这是一个简单的例子:
//for each field declared in User,
for (Field field : User.class.getDeclaredFields()) {
//get the static type of the field
Class<?> fieldType = field.getType();
//if it's String,
if (fieldType == String.class) {
// save/use field
}
//if it's String[],
else if (fieldType == String[].class) {
// save/use field
}
//if it's List or a subtype of List,
else if (List.class.isAssignableFrom(fieldType)) {
//get the type as generic
ParameterizedType fieldGenericType =
(ParameterizedType)field.getGenericType();
//get it's first type parameter
Class<?> fieldTypeParameterType =
(Class<?>)fieldGenericType.getActualTypeArguments()[0];
//if the type parameter is String,
if (fieldTypeParameterType == String.class) {
// save/use field
}
}
}
请注意,我使用了引用相等 ( ==
) 而不是isAssignableFrom
匹配String.class
,String[].class
因为String
is final
。
编辑:刚刚注意到你关于查找嵌套UserDefinedObject
s 的一点。您可以对上述策略应用递归以搜索这些策略。