Java 使用数组中转换的列表的ClassCastException.sort(…)
当我将Arrays.sort()与一个比较器和一个列表一起用作一个集合(该集合先前已转换为一个数组)时,我会得到一个类强制转换异常。这是我的代码:Java 使用数组中转换的列表的ClassCastException.sort(…),java,Java,当我将Arrays.sort()与一个比较器和一个列表一起用作一个集合(该集合先前已转换为一个数组)时,我会得到一个类强制转换异常。这是我的代码: List<SomeClazz> somes = new ArrayList<SomeClazz>(); Comparator<SomeClazz> attrComparator = new AttrComparator(); somes = createSomeObjectes(); // returnes a
List<SomeClazz> somes = new ArrayList<SomeClazz>();
Comparator<SomeClazz> attrComparator = new AttrComparator();
somes = createSomeObjectes(); // returnes a list of course
// this is line 25 where the exception occours
Arrays.sort((SomeClazz[])somes.toArray(), attrComparator);
这可能是什么原因?提前谢谢
(SomeClazz[])somes.toArray()
应该是
somes.toArray(new SomeClazz[somes.size()])
您不能将对象[]
强制转换为SomeClazz[]
,但这是将集合转储到您选择的数组类型中的“认可”方法
应该是
somes.toArray(new SomeClazz[somes.size()])
您不能将
对象[]
强制转换为SomeClazz[]
,但这是将集合转储到您选择的数组类型中的“已批准”方法。根据列表的javadoc。toArray
对象[]java.util.List.toArray()
返回一个数组,该数组以正确的方式包含此列表中的所有元素
顺序(从第一个元素到最后一个元素)
返回的数组将是“安全的”,因为没有对它的引用
由该列表维护。(换句话说,此方法必须分配一个
新阵列(即使此列表由阵列支持)。因此,调用方是
可以自由修改返回的数组
此方法充当基于数组和基于集合之间的桥梁
API
使用List.toArray(T[]arr)
根据
List.toArray的javadoc
对象[]java.util.List.toArray()
返回一个数组,该数组以正确的方式包含此列表中的所有元素
顺序(从第一个元素到最后一个元素)
返回的数组将是“安全的”,因为没有对它的引用
由该列表维护。(换句话说,此方法必须分配一个
新阵列(即使此列表由阵列支持)。因此,调用方是
可以自由修改返回的数组
此方法充当基于数组和基于集合之间的桥梁
API
使用List.toArray(T[]arr)
比较器
和列表
。输入错误或潜在的ClassCastException
?输入错误,没有看到,为什么不使用Collections.sort(somes,attrComparator)代码>?比较器
和列表
。输入错误或潜在的ClassCastException
?输入错误,没有看到,为什么不使用Collections.sort(somes,attrComparator)代码>?或somes.toArray(新somesclazz[0])
或somes.toArray(新somesclazz[0])
。
<T> T[] toArray(T[] a);
Arrays.sort(somes.toArray(new SomeClazz[]{}), attrComparator);