首页 > 代码库 > 《JAVA编程思想》学习笔记——第十五章 泛型

《JAVA编程思想》学习笔记——第十五章 泛型

    在面相对象编程中,多态算是一种泛化机制。

    泛型实现了参数化类型的概念。

    泛型的主要目的之一就是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性。


    元组

    仅一次方法调用就能返回多个对象,你应该经常需要这样的功能吧。可是return语句只允许返回单个对象。因此,解决方法就是创建一个对象,用它来持有想要返回的多个对象。例:

    public class TwoTuple<A,B> {}

    public class ThreeTuple<A,B,C> extents TwoTuple<A,B> {}

    public class FourthTuple<A,B,C,D> extents ThreeTuple<A,B,C> {}

    public class FiveTuple<A,B,C,D,E> extents FourthTuple<A,B,C,D> {}


    泛型接口

    和泛型类的用法一样,例:

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


    泛型方法

    无论何时,只要你能做到,你就应该尽量使用方法。也就是说,如果使用泛型方法可以取代将整个类型泛型化,那么就应该只使用泛型方法,因为它可以使事情更清楚明白。另外,对于一个static的方法而言,无法访问泛型类的类型参数,所以,如果static方法需要使用泛型能力,就必须使其成为泛型方法。

    要定义泛型方法,只需将泛型参数列表置于返回值之前。

    当使用泛型类时,必须在创建对象的时候指定类型参数的值,而使用泛型方法的时候,通常不必指明参数类型,因为编译器会为我们找出具体的类型。这称为"类型参数推断(type argument inference)"。


    显式的类型说明

    要显式地指名类型,必须在点操作符和方法名之间插入尖括号,然后把类型置于尖括号内。


    可变参数与泛型方法

    泛型方法与可变列表能够很好地共存,例:

    public class C {

        public <T> void f(T... args) {

            

        }

    }


    擦除

    在泛型代码内部,无法获得任何有关泛型参数类型的信息

    泛型限定边界:<T extends A>

    在基于擦除的实现中,泛型类型被当做第二类类型处理,即不能在某些重要的上下文环境中使用的类型。泛型类型只有在静态类型检查期间才出现,在此之后,程序中的所有泛型类型都将被擦除,替换为它们的非泛型上界。例如,诸如List<T>这样的类型注解将被擦除为List, 而普通的类型变量在未指定边界的情况下被擦除为Object


    边界

    <T extends A & I> :    extends多个,则class在前,interface在后


    通配符

    <? extends A>

    <? super B>

    <?>  无界通配符,意味着"任何事物"

    


本文出自 “小城运维” 博客,请务必保留此出处http://lixcto.blog.51cto.com/4834175/1918879

《JAVA编程思想》学习笔记——第十五章 泛型