将Java中的动态转换对象转换为List<?>

4

我有一个情况,需要将 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 类。我只能在运行时获取这个类。
如何实现呢?

这段代码的长度不足以理解你想要做什么。你打算再次将列表作为一个对象返回吗?你打算以相同的方式迭代所有的列表吗?为什么传递对象而不是强类型的列表?我认为,你可能在寻找泛型概念(http://en.wikipedia.org/wiki/Generics_in_Java)。 - mindandmedia
我的需求是使用Java反射获取列表值,并通过循环迭代。使用反射API只能获取对象。因此,在获取列表属性的对象值后,我想迭代列表值... - Jaypee
3个回答

11
基本上,虽然我并不推荐这样做,但你可以像这样做,类型限制甚至都不是必要的:
 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;
}

它还展示了它所引入的问题。

我需要将List<integer>转换为List<UserDto>,这个UserDto类有一些属性,比如userId和userName。我该如何从这个列表中访问这些属性值呢?userList.get(0) - Jaypee

3

您需要了解Java中的泛型,即<>之间的内容在运行时会被擦除,因此声明以下列表是完全合法的。

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;
}

-1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接