[英]Incompatible types: int[] cannot be converted to Comparable<Object>[]
我是泛型和铸造问题的新手。 我尝试对任何可比较的类型数组进行排序。 错误如标题; 代码如下:整数错误相同。 有什么问题,为什么?
class Sort{
public static void selectionSort(Comparable<Object>[] input)
{/* selection Sort Alg*/}
public static void main((String[] args){
int[] intArray = {2,3,5,1};
Sort.selectionSort(intArray);
}
}
你在这里有两个问题:
int
是一个 POD,而不是一个对象。 从int[]
到相应的Integer[]
装箱和拆箱不会自动执行。 您需要将intArray
声明为:
Integer[] intArray = {2,3,5,1};
Integer
实现Comparable<Integer>
,而不是Comparable<Object>
。 这两种专业化是不同且不兼容的类型。 声明selectionSort
的正确方法是使用泛型,正如您在标题中所建议的:
public static <T extends Comparable<T>> void selectionSort(T[] input)
您的代码片段中有两个问题
第一个是你的方法的参数,让我们看看这个例子
void simple(Comparable<Object> input) {}
这个简单的方法需要一个Comparable<Object>
的实例。
要为此创建一个实例,您可以实现如下类:
class MyComparable implements Comparable<Object> {}
您必须知道的是 genericType ( className ) 可确保您的类型安全。 这意味着:
Comparable<String>
只能比较 String 对象Comparable<Object>
只能比较 Object 对象就泛型参数而言,您无法真正了解类层次结构。
Integer
类实现Comparable<Integer>
以便能够使用它,您可以这样做:
void simple(Comparable<Integer> input) {}
您将能够传递实现Comparable<Integer>
。
与数组是相同的规则,
void array(Comparable<Integer>[] input) {}
但是您应该记住的是int[]
与Integer[]
不同 JVM 对这些类型使用不同的操作。
int[]
存储原始整数值。 Integer[]
存储对Integer
类的引用。
Comparable<Integer>[] array = {1,2,3,4};
不被允许Comparable<Integer>[] array = new Integer[] {1,2,3,4};
是有效的陈述int 是一个原始类型,您应该使用 Integer。 你已经有一个排序整数的排序方法:
class Sort{
public static void main(String[] args){
List<Integer> intList = new ArrayList<Integer>();
intList.add(2);
intList.add(3);
intList.add(5);
intList.add(1);
Collections.sort(intList);
System.out.println(intList.toString());
}
}
泛型仅适用于 Object,不适用于原始类型。 幸运的是,您可以在包 java.lang 中找到一些有用的包装类,例如对象 Integer。 您的代码将变为:
Integer[] intArray = new Integer[]{2,3,5,1};
Sort.selectionSort(intArray);
我建议将参数更改为 selectionSort:您不需要Comparable<Object>
,而是通用T<extends Comparable<? super T>>
T<extends Comparable<? super T>>
; 换句话说,您需要一个扩展类的参数,该类可以比较 T 及其超类
尝试这个。 有用。 搜索谷歌了解更多详情。
public class Test{
public static void main(String[] args) {
String[] arr1 ={"a","b","c"};
Float[] arr2 ={1.1f, 1.2f, 1.3f};
Integer[] arr3 = {1,2,3};
Object[][] arr = {arr1,arr2,arr3};
System.out.println(arr[1][1]);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.