分享

Java泛型:泛型类、泛型接口和泛型方法

 孤独一兵 2016-10-18

泛型类

容器类应该算得上最具重用性的类库之一。

Java泛型:泛型类、泛型接口和泛型方法

Container类保存了一对key-value键值对,但类型是死定的,也就是说如果我要创建一个键值对String-integer类型的,当前这个Container是做不到的,必须在定义。

Java泛型:泛型类、泛型接口和泛型方法

在编译器,是无法知道K和V具体是什么类型,只有在运行时才会真正根据类型来构造和分配内存。可以看一下现在Container类对于不同类型的支持情况。

Java泛型:泛型类、泛型接口和泛型方法

泛型接口

在泛型接口中,生成器是一个很好的理解

Java泛型:泛型类、泛型接口和泛型方法

泛型方法

一个基本原则是:无论何时,只要你能做到,你就应该尽量使用泛型方法。也就是说,如果使用泛型方法可以取代将整个类型化,那么应该有限使用泛型方法。

Java泛型:泛型类、泛型接口和泛型方法

可以看到方法的参数彻底泛型化了,这个过程设计到编译器的类型推到和自动打包,也就是原来需要我们自己对类型进行的判断和处理,现在编译器帮我们做了。这样在定义方法的时候不必考虑以后到底需要处理哪些类型的参数,大大增加了编程的灵活性。

再看一个泛型方法和可变参数的例子:

Java泛型:泛型类、泛型接口和泛型方法

泛型接口实现的方式

Java泛型:泛型类、泛型接口和泛型方法

类型擦除

Java泛型:泛型类、泛型接口和泛型方法

显然在平时使用中,ArrayList()和new ArrayList()是完全不同的类型,但是在这里,程序却的的确确会输出true

限制泛型可用类型

如果想限制使用泛型类别时,只能用某个特定类型或者是其子类型才能实例化该类型时,可以在定义类型时,使用extends关键字指定这个类型必须是继承某个类,或者实现某个接口,也可以是这个类或接口本身。

Java泛型:泛型类、泛型接口和泛型方法

类声明中:public class ListGenerator这样就规定了T必须是一个List继承系中的类,即实现了List接口的类。

当不使用泛型时,比如那些声明时带有的集合类型,如果使用时没有指定类型,泛型类别为Object.

是一个限定通配符,?代表了一个未知的类型,并且是它SomeClass的子类,也可以SomeClass本身。

学习Java的同学注意了!!!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多