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