java将ArrayList转换为不可修改的ArrayList
我试图得到一个不可修改的ArrayList到一个最终变量EX_FIELDS。exList是现有的ArrayList对象
EX_FIELDS = (ArrayList<String>) Collections.unmodifiableList(exList);
此代码存在于静态块中。当类加载时,我得到以下错误
java.lang.ClassCastException: java.util.Collections$UnmodifiableRandomAccessList cannot be cast to java.util.ArrayList
我需要使用EX_字段来支持随机访问。还有其他方法可以实现吗?提前谢谢你的帮助
# 1 楼答案
出现错误的原因是
Collections.unmodifiablelist(exList)
返回一个列表,您要做的是列表是一个接口,无法实例化。EX_FIELDS变量只能存储ArrayList对象,因此出现classcast异常错误
正确的方法是:
# 2 楼答案
你会得到一个ClassCastException,因为
Collections.unmodifiableList()
不返回ArrayList,它返回一个List<T>
(接口),它可以是实现List接口的任何支持类。从异常中可以看到,实际上是返回一个UnmodifiableRandomAccessList
创建变量
EX_FIELDS
时,应该像也就是说,EX_FIELDS是一个列表,您已经为实际实例选择了一个数组列表。以后你会做的
unmodifiableList()
返回一个列表,但只要它符合列表接口,您就不在乎它实际上是什么类型的