32

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

对象 obj2 = 来自某个来源。. ;
ArrayList al1 = new ArrayList();
al1 = (ArrayList) obj2;
System.out.println("List2 值:"+al1);

但它是打印的null。我怎样才能做到这一点?

4

10 回答 10

28

您可以创建将任何集合转换为 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;
}

您还可以混合以下验证:

public static boolean isCollection(Object obj) {
  return obj.getClass().isArray() || obj instanceof Collection;
}
于 2018-10-16T15:45:09.557 回答
15

这只会导致nullifobj2已经null在演员表之前,所以你的问题比你想象的要早。al1(此外,如果您要立即分配给它,则无需构造一个新的 ArrayList 来初始化它。只需说ArrayList al1 = (ArrayList) obj2;。)

于 2011-09-08T11:42:59.990 回答
4
    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);
于 2020-07-22T05:56:16.373 回答
1

而是将其转换为对象数组。

Object obj2 = from some source . . ;
Object[] objects=(Object[])obj2;
于 2014-07-09T09:56:25.227 回答
1

一个有趣的注意事项:似乎尝试将对象强制转换为 JavaFX 应用程序线程上的列表总是会导致 ClassCastException。

我和你有同样的问题,没有答案有帮助。玩了一段时间后,我唯一能缩小范围的就是线程。运行代码以在 UI 线程以外的任何其他线程上强制转换按预期成功,并且正如本节中的其他答案所建议的那样。

因此,请注意您的源代码没有在 JavaFX 应用程序线程上运行。

于 2020-03-17T10:51:44.837 回答
1

2021 年的答案(Java 8+)

假设您的对象是一个有效的 List 对象,您可以使用:Collections.singletonList(object)-- 返回一个仅包含指定对象的不可变列表。

List<Object> list = Collections.singletonList(object);

如果您希望它采用特定的数据类型,请使用Stream.of(object)

List<String> list = Stream.of(object).map(Object::toString).collect(Collectors.toList())

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

于 2021-10-05T17:14:10.560 回答
1

你也可以这样做:

  new ObjectMapper().convertValue(sourceObject, new TypeReference<List<YourTargetClass>>() {});
于 2021-07-27T18:35:31.380 回答
0

转换失败(java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList),因为您肯定有一些不是ArrayList的对象。验证不同对象的类型。

于 2015-07-22T10:15:45.327 回答
0

不建议将 fromjava.lang.Object直接转换为ArrayList<T>具有 T 的元素,因为它可能导致转换异常。推荐的方法是首先转换为原始数组,T然后使用Arrays.asList(T[]) 从 java 获取实体的方法之一javax.ws.rs.core.Response如下 -

    T[] t_array = response.readEntity(object);
    ArrayList<T> t_arraylist = Arrays.asList(t_array);

您仍然会收到Unchecked cast警告。

于 2017-08-04T19:30:20.900 回答
0

我希望这会对你有所帮助

import java.util.ArrayList; 
public class Demo {

 public static void main(String[] args) {
    Object obj2 =null;
    ArrayList al1 = (ArrayList) obj2;
    al1 = (ArrayList) obj2;
    System.out.println("List2 Value: " + al1);
    }
 }

obj2 对象在您将其转换为 ArrayList 之前默认为 null。这就是为什么将 'al1' 打印为 null 的原因。

于 2020-07-22T06:18:15.273 回答