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

时间:2011-09-08 11:38:41

标签: java java-6

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

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

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

9 个答案:

答案 0 :(得分:12)

如果演员之前null已经obj2,那么这只会产生null,因此您的问题比您想象的要早。 (此外,如果您要立即分配al1,则无需构造新的ArrayList来初始化ArrayList al1 = (ArrayList) obj2;。只需说出{{1}}。)

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

Object obj2 = from some source . . ;
Object[] objects=(Object[])obj2;

答案 3 :(得分:1)

不推荐将java.lang.Object直接转换为具有T元素的ArrayList<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);

答案 4 :(得分:1)

一个有趣的注释:看来,从对象转换为JavaFX Application线程上的列表总是会导致ClassCastException。

我和你有同样的问题,没有答案。在玩了一段时间之后,我唯一可以缩小范围的就是线程。运行该代码以将其投放到除UI线程以外的任何其他线程上,均按预期成功完成,并且如本节中的其他答案所建议。

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

答案 5 :(得分:0)

转换失败( java.lang.ClassCastException:java.lang.String无法强制转换为java.util.ArrayList ),因为您肯定有些对象不是 ArrayList的 即可。验证不同对象的类型。

答案 6 :(得分:0)

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

答案 7 :(得分: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的原因。

答案 8 :(得分:0)

你也可以这样做:

  new ObjectMapper().convertValue(sourceObject, new TypeReference<List<YourTargetClass>>() {});