如何实例化ArrayList <?>并通过Java反射添加项?

use*_*334 6 java reflection arraylist

我正在编写一个将xml转换为Java对象的反序列化方法.我想动态地执行此操作,并避免将硬编码引用写入特定类型.

例如,这是我的一个类的简化版本.

public class MyObject { 
   public ArrayList<SubObject> SubObjects = new ArrayList<SubObject>();
}
Run Code Online (Sandbox Code Playgroud)

以下是该方法的精简版:

public class Serializer {    
    public static <T> T fromXml(String xml, Class<T> c) {
       T obj = c.newInstance();       
       Field field = obj.getClass().getField("SubObjects");    
       //help : create instance of ArrayList<SubObject> and add an item
       //help#2 : field.set(obj, newArrayList);

       return obj;
    }
}
Run Code Online (Sandbox Code Playgroud)

调用此方法将如下所示:

MyObject obj = Serializer.fromXml("myxmldata", MyObject.class);
Run Code Online (Sandbox Code Playgroud)

请原谅我,如果这是一个微不足道的问题,因为我是一名学习Java的C#开发人员.

谢谢!

Gar*_*vis 8

应该是非常接近的东西:

Object list = field.getType().newInstance();

Method add = List.class.getDeclaredMethod("add",Object.class);

add.invoke(list, addToAddToList);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.