我对仿制药和铸造问题不熟悉。我尝试排序任何类似的类型数组。错误是标题;代码如下:整数的错误相同。问题是什么?为什么?
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);
}
}
答案 0 :(得分:4)
这里有两个问题:
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)
答案 1 :(得分:1)
您的代码段中有两个问题
第一个是您的方法的参数,让我们看一下这个例子
void simple(Comparable<Object> input) {}
这个简单的方法需要一个Comparable<Object>
的实例。
要为其创建实例,您可以实现类:
class MyComparable implements Comparable<Object> {}
您必须意识到的是genericType(className),确保您的类型安全。这意味着:
Comparable<String>
只能比较String对象Comparable<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};
是有效声明答案 2 :(得分:0)
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());
}
}
答案 3 :(得分:0)
泛型仅适用于Object,而不适用于基本类型。幸运的是,您可以在java.lang包中找到一些有用的包装类,就像对象Integer一样。 您的代码将变为:
Integer[] intArray = new Integer[]{2,3,5,1};
Sort.selectionSort(intArray);
我建议将参数更改为selectionSort:您不需要Comparable<Object>
,而是通用T<extends Comparable<? super T>>
;换句话说,你需要一个扩展一个类的参数,它可以比较T和他们的超类
答案 4 :(得分:0)
尝试一下。有用。在Google中搜索更多详细信息。
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]);
}
}