Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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 铸造ArrayList<;可比>;转换为不同的ArrayList类型_Java_Sorting_Casting_Arraylist - Fatal编程技术网

Java 铸造ArrayList<;可比>;转换为不同的ArrayList类型

Java 铸造ArrayList<;可比>;转换为不同的ArrayList类型,java,sorting,casting,arraylist,Java,Sorting,Casting,Arraylist,我有一个排序方法,它接受一个ArrayList,使用compateTo()方法对它进行排序,然后返回一个排序后的ArrayList。这是: publicstaticarraylistinsertionsort(ArrayList 输入){ 可比温度; 阵列列表结果; 结果=(ArrayList)input.clone(); 如果(result.size()>1){ for(int k=1;k

我有一个排序方法,它接受一个ArrayList,使用compateTo()方法对它进行排序,然后返回一个排序后的ArrayList。这是:

publicstaticarraylistinsertionsort(ArrayList
输入){
可比温度;
阵列列表结果;
结果=(ArrayList)input.clone();
如果(result.size()>1){
for(int k=1;k
在我的程序的其他地方,我定义了实现可比较接口的DVD对象,创建了一组对象,并将它们存储在名为members的ArrayList中。现在,当我尝试像这样对成员进行排序时:

members=(ArrayList)YaSort.insertionSort(members);
我得到以下错误:线程“main”java.lang.ClassCastException中的异常:[Ljava.lang.Comparable;无法转换为[LDVD

我如何解决这个问题?
谢谢您的时间。

您需要将
成员定义为
ArrayList
,因为即使是DVD实现/扩展了Compariable
ArrayList
也没有实现/扩展
ArrayList
——这称为协方差/逆变,Java不支持。
(实际上在C#中支持它)

似乎您希望对实现
可比的
对象列表进行排序,并返回相同对象的列表,而不仅仅是
可比的
。在这种情况下,您可以使用编译器可以使用的方法参数来确定返回结果的类型:

public static <T extends Comparable<? super T>> ArrayList<T>
    insertionSort(ArrayList<T> input) {
    ....
}

泛型的要点是您不需要强制转换任何引用类型。此外,混合泛型和原始类型的稀有类型是不好的。按照惯例,
List
通常比
ArrayList
更受欢迎

方法的开头应该类似于:

public static <T extends Comparable<? super T>> List<T> insertionSort(
    List<T> input
) {
    List<T> result  = new ArrayList<T>(input);

public static我认为应该是
java.util.Comparable
(我的意思是
java.lang.Comparable
。它是
java.util.Comparator
。显然。但它是泛型类型,不应该原始使用。)“而且,混合泛型和原始类型的罕见类型是不好的。”这意味着什么?@ŞükrüHasdemir In
ArrayList
您使用的是泛型,但
Comparable
是泛型类型,但缺少泛型参数。混合泛型和原始类型的后果很微妙。为什么我在这里投了反对票?
public static <T extends Comparable<? super T>> List<T> insertionSort(
    List<T> input
) {
    List<T> result  = new ArrayList<T>(input);