我有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
。
我怎样才能做到这一点?
答案 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>>() {});