我有一个名为User的类,它有一个Account类对象列表,如下所示
public class User{
private List<Account> accounts = new ArrayList<Account>();
}
Account对象有一个瞬态字段,我想找到它并用
做一些事情public class Account{
private transient openDateInOrgDateFormat;
}
这个字段我想找到使用反射,然后检查它的瞬态然后做什么。通过反射如何查找类型集合的字段然后迭代它并查找列表中的对象内的字段是否是瞬态的。
答案 0 :(得分:6)
由于我不知道究竟是什么阻止您编写代码,因此这里有一些应该有用的工具:
获取在类使用中声明的字段数组
Field[] fields = User.class.getDeclaredFields()
检查分配给字段使用field.getType()
的类型。
检查类型是否与List之类的其他类型相同,只需使用
type.equals(List.class);
检查一个类型是否属于某个祖先的家族(如List是Collection的子类型)使用isAssignableFrom
喜欢
Collection.class.isAssignableFrom(List.class)
检查transient
使用
Modifier.isTransient(field.getModifiers())
要访问特定实例中字段所占的值,请使用
Object value = field.get(instanceWithThatField)
但是如果是private
字段,您需要先通过field.setAccessible(true)
访问它。然后,如果您确定对象value
的类型,您可以将其转换为类型
List<Account> list = (List<Account>) value;
或在一行中执行这两项操作,例如
List<Account> list = (List<Account>) field.get(userObject);