【问题标题】:Java Dynamic Casting Object to List<?>Java 将对象动态转换为 List<?>
【发布时间】:2012-02-22 10:08:00
【问题描述】:

我有一种情况需要将Object 转换为List&lt;SomeClassName&gt;

我从请求参数中得到对象值List&lt;SomeClass&gt;

我需要将此Object 转换为List&lt;SomeClass&gt;。我在编译时不知道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&lt;jp.dto.UserDto&gt; list = (List&lt;jp.dto.UserDto&gt;)Object;,但这里的问题是我在编译时不知道jp.dto.UserDto 类。我只能在运行时得到它。

如何做到这一点?

【问题讨论】:

  • 这还不足以理解你想要做什么。您是否要再次将列表作为对象返回?你会以同样的方式遍历所有列表吗?你为什么要传递对象而不是强类型列表。我认为,您可能正在寻找的一般想法是泛型 (en.wikipedia.org/wiki/Generics_in_Java)
  • 我使用 java 反射的要求我需要获取列表值,并希望通过循环进行迭代。使用反射 API 我只能获取对象..所以在获取列表属性的对象值之后.我想迭代列表值...

标签: java


【解决方案1】:

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

 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,我需要转换 List userList,这个用户 Dto calas 有一些属性,比如 userId、userName,我如何从这个列表中访问这些属性值。 userList.get(0)
【解决方案2】:

您应该了解 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;
}

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-15
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多