在Java中的集合中的静态方法需要澄清吗?

时间:2013-02-21 16:28:20

标签: java

我知道泛型,但我不清楚这种语法。例如,在Collections.sort()中:

public static <T> void sort(List<T> list, Comparator<? super T> c)

返回类型void之前静态<T>的意义是什么?

4 个答案:

答案 0 :(得分:3)

来自sort的方法签名:

public static <T> void sort(List<T> list, Comparator<? super T> c) {

这个<T>定义了一个可以在方法定义中引用的任意泛型类型。

我们在这里说的是,该方法需要某种类型的List(我们不关心哪种)T和另一种类型的Comparator,但此类型必须是T的超类型。这意味着我们可以这样做:

Collections.sort(new ArrayList<String>(), new Comparator<String>());
Collections.sort(new ArrayList<Integer>(), new Comparator<Number>());

但不是这个

Collections.sort(new ArrayList<String>(), new Comparator<Integer>());

答案 1 :(得分:2)

  

返回类型void之前静态<T>的意义是什么?

这是泛型方法<T>是其类型参数。它表示只要比较器能够比较此类型的对象或其任何超类型(List<T>),它将对包含任何类型的对象(Comparator<? super T>)的列表进行排序。因此,编译器将允许您调用sort传递,例如,List<Integer>Comparator<Number>(因为IntegerNumber的子类型),但是不是List<Object>Comparator<String>

答案 2 :(得分:1)

您可以在不实例化Collections的情况下进行排序。 sort()方法是Collections类的静态方法。

考虑以下语法之间的区别:

Collections col = new Collections();
col.sort(someCollection);

Collections.sort(someCollection);

sort()方法不必依赖某些可能的Collections对象的属性。因此,最好将static方法声明为设计问题。

答案 3 :(得分:1)

<T>被称为类型参数,在此用于抽象sort方法所操作的项目类型。您可以拥有类或方法的类型参数。这是为方法指定类型参数的语法,该方法必须在方法的返回类型之前。