Java类型参数vs参数

时间:2012-02-21 12:07:33

标签: java types

在java中考虑这些排序函数:

public static <T extends Comparable<? super T>> void sort(T[] a){

}

VS

public static void sort(Comparable[] a){

}

如何使用这些方法有什么区别?例如,该方法可以采用一个对象,其超类实现了可比较的子类

我注意到对于第二种方法,eclipse编辑器使用此消息抱怨函数定义: “Comparable是一种原始类型。对泛型类型Comparable的引用应该参数化。”

2 个答案:

答案 0 :(得分:4)

第一个确保阵列的所有元素彼此相当。第二个只确保所有元素都实现Comparable。

您可以将包含Integer,String和Date实例的数组传递给第二个方法,但不能使用第一个方法。第一个类型更安全。

答案 1 :(得分:0)

第二个,正如编译器告诉你的那样,没有泛型类型的参数。但是,你可以写

public static void sort(Comparable<?>[] a) {
}

将关闭编译器。

两者在使用方面实际上没有太大区别,除了前者阻止你传入一个实现Comparable的破坏对象数组,其中X不在类的超类链中。 (Y类实现可比较)

在实施方面,有一个重要的区别在于你只能使用T。