Java泛型

解耦类或方法与类型之间的约束。

泛型出现的一个原因:容器类

 

泛型类

只能持有单个对象的类

如何持有别的类型的对象?使用object

通常来说,我们只持有一种类型的对象,泛型的目的是指定持有哪种对象。

泛型接口

Public interface Generator<T>{ T next(); }

Public class CoffeGenerator implements Generator<Coffee>{ public Coffee next();}

泛型方法

泛型方法可独立于类,尽量使用泛型方法。(Public <T> void f(T x));对于static方法,若需要使用泛型能力,就必须使其成为泛型方法,因为static发发无法访问泛型类的类型参数。

(public static <K,V> Map<K,V> map(){})

在使用泛型类时,在创建对象时必须指定类型参数,而调用方法时,无需指定,编译器会做类型参数判断,相当于重载。

调用泛型方法后,其返回值会被赋给一个Object类型的变量。

可变参数与泛型方法

public static <T> List<T> makeList(T… args){}

 

匿名内部类

class Teller{
    public static Generator<Teller> generator(){
        return new Generator<Teller>(){
            public Teller next(){
                return new Teller();
            }
        };
    }
}

 

泛型的擦除

class c1 = new ArrayList<String>().getClass();
class c2 = new ArrayList<Integer>().getClass();
return (c1==c2)//True

在泛型代码内部,无法获得任何有关泛型参数类型的信息。使用边界信息(extends)

擦除的补偿

显示地传递class对象

局限性

基本类型无法作为类型参数。(不过Java SE5具备自动拆包、装包功能)

 

posted on 2019-12-30 16:35  笨宝宝  阅读(125)  评论(0编辑  收藏  举报