Think in Java(十二):泛型

1.使用泛型方法可以取代将整个类泛型话,要定义泛型方法,只需将泛型参数列表至于返回值之前:public class GenericMethods {public <T> void f(T x) {System.out.println(x.getClass().getName());}public static void main(String[] args) {GenericMethods gm = new GenericMethods();gm.f("");gm.f(1);gm.f(1.0);gm.f(1.0F);gm.f('c');gm.f(gm);}}2.可变参数可以和泛型方法很好的共存:public class GenericVarargs {public static <T> List<T> makeList(T… args) {List<T> result = new ArrayList<T>();for (T item : args)result.add(item);return result;}public static void main(String[] args) {List<String> ls = makeList("A");System.out.println(ls);ls = makeList("A", "B", "C");System.out.println(ls);ls = makeList("ABCDEFFHIJKLMNOPQRSTUVWXYZ".split(""));System.out.println(ls);}}3.边界使你可以在用于泛型的参数类型上设置限制条件。class AAA<T extends BBB>4.<? extends T>不是一个集合,,而是T的某一种子类的意思,记住是一种,单一的一种,问题来了,由于连哪一种都不确定,带来了不确定性,所以是不可能通过add()来加入元素。你或许还觉得为什么add(T)不行? 因为<? extends T>是T的某种子类,能放入子类的容器不一定放入超类,也就是没可能放入Tpublic class GenericsAndCovariance {public static void main(String[] args) {List<? extends Fruit> flist = new ArrayList<Apple>();// Compile Error: can't add any type of object:// flist.add(new Apple());// flist.add(new Fruit());// flist.add(new Object());flist.add(null); // Legal but uninteresting// We know that it returns at least Fruit:Fruit f = flist.get(0);}}5.<? super T>这里比较容易使用,没<? extends T>这么多限制,这里的意思是,以T类为下限的某种类,简单地说就是T类的超类。但为什么add(T)可以呢?因为能放入某一类的容器一定可以放入其子类,多态的概念。

一个有信念者所开发出的力量,大于99个只有兴趣者。

Think in Java(十二):泛型

相关文章:

你感兴趣的文章:

标签云: