Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用数组中转换的列表的ClassCastException.sort(…)_Java - Fatal编程技术网

Java 使用数组中转换的列表的ClassCastException.sort(…)

Java 使用数组中转换的列表的ClassCastException.sort(…),java,Java,当我将Arrays.sort()与一个比较器和一个列表一起用作一个集合(该集合先前已转换为一个数组)时,我会得到一个类强制转换异常。这是我的代码: List<SomeClazz> somes = new ArrayList<SomeClazz>(); Comparator<SomeClazz> attrComparator = new AttrComparator(); somes = createSomeObjectes(); // returnes a

当我将Arrays.sort()与一个比较器和一个列表一起用作一个集合(该集合先前已转换为一个数组)时,我会得到一个类强制转换异常。这是我的代码:

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