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

如何将java.lang.Object转换为ArrayList?,java,java-6,Java,Java 6,我有一个有效的ArrayList对象,格式为java.lang.object。我必须再次将对象转换为数组列表。我试过这个: Object obj2 = from some source . . ; ArrayList al1 = new ArrayList(); al1 = (ArrayList) obj2; System.out.println("List2 Value: "+al1); 对象obj2=来自某个源; ArrayList al1=新的ArrayList(); al1=(Array

我有一个有效的
ArrayList
对象,格式为
java.lang.object
。我必须再次将
对象
转换为
数组列表
。我试过这个:

Object obj2 = from some source . . ; ArrayList al1 = new ArrayList(); al1 = (ArrayList) obj2; System.out.println("List2 Value: "+al1); 对象obj2=来自某个源; ArrayList al1=新的ArrayList(); al1=(ArrayList)obj2; System.out.println(“列表2值:+al1”); 但它正在打印
null

我该怎么做

这只会导致
null
如果
obj2
在演员阵容之前就已经
null
,那么你的问题比你想象的要早。(另外,如果要立即为其赋值,则无需构造新的ArrayList来初始化
al1
。只需说
ArrayList al1=(ArrayList)obj2;

,而是将其强制转换为对象数组

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

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

不建议直接从
java.lang.Object
转换为包含T元素的
ArrayList
,因为这可能导致强制转换异常。建议的方法是首先转换为
T
的基本数组,然后使用
array.asList(T[])
从java
javax.ws.rs.core.Response
获取实体的方法之一如下-

    T[] t_array = response.readEntity(object);
    ArrayList<T> t_arraylist = Arrays.asList(t_array);
T[]T\u数组=response.readEntity(对象);
ArrayList t_ArrayList=Arrays.asList(t_array);

您仍然会收到未选中的强制转换警告。

您可以创建一个静态util方法,将任何集合转换为Java列表

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

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

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

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

Object Object=new Object();
    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);
//第一条路 List objects1=new ArrayList(); objects1.添加(object); //第二条路 List objects2=Arrays.asList(对象); //第三条路 List objects3=集合。singletonList(对象);
我希望这会对您有所帮助

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。

如果它打印为null,则在执行此代码之前您会遇到问题;隐藏在“源…”中的错误是什么,对我来说,它工作正常。还提供更多详细信息,对象obj2=来自某个源;对于上面的obj2,您正在帮助下面是我尝试过的代码,它工作正常;al11.添加(“a”);al11.添加(“b”);对象obj2=al11;ArrayList al1=新的ArrayList();al1=(ArrayList)obj2;System.out.println(“列表2值:+al1”)@达莫达:你的第二句话对我也很管用。但是我的隐藏方法以对象的形式返回字符串,因为我得到以下异常:线程“main”java.lang.ClassCastException中的异常:java.lang.String不能转换为java.util.ArrayListBJ2不为null。我打印了obj2的值。实际上obj2是字符串的形式。
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);
    }
 }