Java动态转换对象到列表<! - ? - >

时间:2012-02-22 10:08:00

标签: java

我需要将Object投射到List<SomeClassName>

我从请求参数中获取对象值List<SomeClass>

我需要将此Object投射到List<SomeClass>。我在编译时不知道SomeClass

我可以在运行时将类类型设为String

样品:

private static Object createList(Object object){

      List dd = (List)object;

      //the List contains the objects of this class
      Class cls = Class.forName(dd.get(0).getClass().getName());

      //I would like to cast this Object to List<thisClass>
}

例如,类是jp.Dto.UserDto,然后转换应该像List<jp.dto.UserDto> list = (List<jp.dto.UserDto>)Object;,但这里的问题是我在编译时不知道jp.dto.UserDto类。我只能在运行时才能得到它。

如何实现这一目标?

3 个答案:

答案 0 :(得分:9)

基本上,我不是真的推荐,你可以做这样的事情,甚至不需要类型限制:

 public static void main(String[] args) {
    Object list = new ArrayList<String>();
    List<Integer> integers = cast(list);
}


@SuppressWarnings("unchecked")
public static <T extends List<?>> T cast(Object obj) {
    return (T) obj;
}

它还显示了它引入的问题

答案 1 :(得分:2)

你应该理解Java中的泛型,即&lt;&gt;之间的东西。在运行时被删除,因此声明如下列表是完全合法的。

List list = (List)someObject;

此外,还允许将对象添加到此列表中,如下所示

list.add(someObjectOfACertainClass);

根据我的理解,您正在传递一个对象,该对象是某个类的对象列表,并且您希望以编译时类型安全的方式遍历该列表。您可以执行以下操作:

private static <T> Object createList(List<T> argumentList) {
    List<T> otherList = new ArrayList<T>();
    //do something here
    return otherList;
}

答案 2 :(得分:0)

将对象添加到您的列表中:

List<FuelLoading> objList=new ArrayList<>();
                            objList.add(new FuelLoading(String.valueOf(vehicleId), String.valueOf(driverId), String.valueOf(fuelN), fillingDate, fillingTk, fillingM, userId));