如何将java.lang.Object转换为ArrayList?

sja*_*ain 12 java java-6

我有一个有效的ArrayList对象形式java.lang.Object.我必须再次转换ObjectArrayList.我试过这个:

Object obj2 = from some source . . ;
ArrayList al1 = new ArrayList();
al1 = (ArrayList) obj2;
System.out.println("List2 Value: "+al1);

但它是印刷品null.我怎样才能做到这一点?

Kil*_*oth 12

这只会导致null如果obj2已经null在演员阵容之前,那么你的问题比你想象的要早.(另外,al1如果你要立即分配它,你不需要构造一个新的ArrayList来初始化.只需说ArrayList al1 = (ArrayList) obj2;.)


dim*_*thu 10

    Object object = new Object();

    // First way
    List objects1 = new ArrayList<Object>();
    objects1.add(object);

    // second way
    List<Object> objects2 = Arrays.asList(object);

    // Third way
    List<Object> objects3 = Collections.singletonList(object);
Run Code Online (Sandbox Code Playgroud)


Har*_*ekh 9

2021 年的答案(Java 8+)

假设您的对象是有效的 List 对象,并且如果您希望它采用特定的数据类型,请使用Stream.of(object)

Object o = Arrays.asList(1, 2);
((List<Object>) o).stream().map(String::valueOf).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

同样,您可以更改映射中的方法以转换为您需要的数据类型。


注意:这将导致Type safety: Unchecked cast. 发生这种情况是因为强制转换是运行时检查,并且当您从某个源接收到该类型时该类型已被删除。您可以使用@SuppressWarnings("unchecked")并接受它。


这可能是关于该主题的一篇好文章:Reified Generics for Java


Luc*_*res 6

您可以创建将所有集合转换为Java列表的util方法

public static List<?> convertObjectToList(Object obj) {
    List<?> list = new ArrayList<>();
    if (obj.getClass().isArray()) {
        list = Arrays.asList((Object[])obj);
    } else if (obj instanceof Collection) {
        list = new ArrayList<>((Collection<?>)obj);
    }
    return list;
}
Run Code Online (Sandbox Code Playgroud)

您还可以在下面将此验证与之混合:

public static boolean isCollection(Object obj) {
  return obj.getClass().isArray() || obj instanceof Collection;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

你也可以这样做:

  new ObjectMapper().convertValue(sourceObject, new TypeReference<List<YourTargetClass>>() {});
Run Code Online (Sandbox Code Playgroud)