我有一个有效的ArrayList
对象,形式为java.lang.Object
. 我必须再次将其转换Object
为ArrayList
. 我试过这个:
对象 obj2 = 来自某个来源。. ; ArrayList al1 = new ArrayList(); al1 = (ArrayList) obj2; System.out.println("List2 值:"+al1);
但它是打印的null
。我怎样才能做到这一点?
您可以创建将任何集合转换为 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;
}
这只会导致null
ifobj2
已经null
在演员表之前,所以你的问题比你想象的要早。al1
(此外,如果您要立即分配给它,则无需构造一个新的 ArrayList 来初始化它。只需说ArrayList al1 = (ArrayList) obj2;
。)
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);
而是将其转换为对象数组。
Object obj2 = from some source . . ;
Object[] objects=(Object[])obj2;
一个有趣的注意事项:似乎尝试将对象强制转换为 JavaFX 应用程序线程上的列表总是会导致 ClassCastException。
我和你有同样的问题,没有答案有帮助。玩了一段时间后,我唯一能缩小范围的就是线程。运行代码以在 UI 线程以外的任何其他线程上强制转换按预期成功,并且正如本节中的其他答案所建议的那样。
因此,请注意您的源代码没有在 JavaFX 应用程序线程上运行。
假设您的对象是一个有效的 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())
同样,您可以更改映射中的方法以转换为您需要的数据类型。
你也可以这样做:
new ObjectMapper().convertValue(sourceObject, new TypeReference<List<YourTargetClass>>() {});
转换失败(java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList),因为您肯定有一些不是ArrayList的对象。验证不同对象的类型。
不建议将 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警告。
我希望这会对你有所帮助
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 的原因。