我知道泛型,但我不清楚这种语法。例如,在Collections.sort()中:
public static <T> void sort(List<T> list, Comparator<? super T> c)
返回类型void之前静态<T>
的意义是什么?
答案 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>
(因为Integer
是Number
的子类型),但是不是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方法所操作的项目类型。您可以拥有类或方法的类型参数。这是为方法指定类型参数的语法,该方法必须在方法的返回类型之前。