【Java基础语法】如何在使用静态方法的时候指定其泛型?万分感谢!

具体点就拿Collections.reverseOrder(); 来说吧
public static <T> Comparator<T> reverseOrder() 这是reverseOrder()的原型
它是静态的,可是又有泛型。请问:
① 我使用这个静态函数的时候,如何指定其泛型呢?

举个例子:
public void f(int i, char ch, String s){}
这个方法中有三个参数,分别为int类型的i,char类型的ch,String类型的s。这三个参数的类型都已经指定了,如果实际参数类型和对应参数类型不一致,编译器会出现错误。
如何才能做到可以任意指定参数的类型呢?这个时候可以使用泛型方法。举个例子:
public <A, B, C> void f(A a, B b, C c){}
这个就是所谓的泛型方法,当向方法中传递参数后,编译器会自动推断出参数的类型,如:
f(1, "hello", 123.123);
第一个参数类型为Integer,第二个为String,第三个为Double(自动包装机制让基本类型自动包装成对应的包装类)。
泛型方法的特征就是方法前面有对尖括号<>,尖括号里面的就是类型参数,也就是说类型是个变量,要由实际的参数推断得来。
Java中的方法就是这样获取泛型能力的,还有其他方式。但是static方法比较特殊,如果要使得static方法具有反省能力就必须要使用到上面的方法。
希望能解决你的问题。追问

非常感谢你那么用心,可是还是不大懂。
请问您可以举一个 使用了系统函数 Collections.reverseOrder(); 并且用到了泛型的代码吗?这样会好懂一点。

谢谢!!

追答

//以下代码摘自《Thinking in Java》

List ints = Arrays.asList(25, 22, 20,
18, 14, 9, 3, 1, 1, 2, 3, 9, 14, 18, 21, 23, 25);
priorityQueue = new PriorityQueue(ints);
QueueDemo.printQ(priorityQueue);
priorityQueue = new PriorityQueue(
ints.size(), Collections.reverseOrder());
priorityQueue.addAll(ints);
QueueDemo.printQ(priorityQueue);
上面的就是Collections.reverseOrder()的用法,这个参数返回的是Comparator类型对象,实现了Comparator接口的compare和equals方法,最后实现了队列对象逆向排序。具体的泛型的使用在该函数内部。
你最好还是把泛型详细了解一下,泛型是个内容比较多的概念,包括泛型方法、泛型类、擦除等内容。看看《Thinking in Java》吧,泛型讲得很好的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-16
把T改成你想要设置成的泛型,比如一个类对象
第2个回答  2013-07-16
String T = "String";
以后你就写 T 就好了 表示 泛型是 String 类型的
相似回答