如何使用java反射迭代Field类型List

时间:2016-10-14 13:06:42

标签: java reflection

我有一个名为User的类,它有一个Account类对象列表,如下所示

 public class User{
   private List<Account> accounts = new ArrayList<Account>();
 }

Account对象有一个瞬态字段,我想找到它并用

做一些事情
public class Account{
  private transient openDateInOrgDateFormat;
}

这个字段我想找到使用反射,然后检查它的瞬态然后做什么。通过反射如何查找类型集合的字段然后迭代它并查找列表中的对象内的字段是否是瞬态的。

1 个答案:

答案 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);