使用java反射修改集合内容

时间:2017-11-19 12:30:12

标签: java reflection

我的情况:我编写了一个函数,它将检查每个属性中的任何对象(对于任何深层),如果有特定的注释,如果是,则将该属性设置为null。但是我遇到了一个问题:如何检查属性是否是一个集合,如果有注释,我需要检查集合的每个元素,如果是,我从集合中删除对象set带有新检查集合的集合。

我的问题:如何使用反射修改此集合内容?

1 个答案:

答案 0 :(得分:0)

好的,所以这篇文章对我很有帮助:Get type of a generic parameter in Java with reflection

但我仍有一些问题,所以这里有一段代码来解释:

假设一个具有集合类型属性的简单类:

static class Bla {
    public ArrayList<String> collection = new ArrayList<String>();
}

现在看到用反射检索String类的函数:

public static void check(Object object) throws IllegalArgumentException, IllegalAccessException {
    Class<?> objectClass = object.getClass();
    Field[] fields = objectClass.getFields();
    for (Field field : fields) {
      Object prop = field.get(object);
      if (prop instanceof ArrayList) {
        Type genericType = field.getGenericType(); // To get the ArrayList<String> Type object
        ParameterizedType pt = (ParameterizedType) genericType; // Cast to a ParameterizedType to
                                                                // recover the type within <T> which
                                                                // is String
        Type[] atp = pt.getActualTypeArguments();// Then call the function to get the array of type
                                                 // argument (e.g.: <T>,<V,U>,...)
        // Do something with this
      }
    }
  }

这就是全部!!