首页 > 代码库 > 《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编程思想》学习笔记——第十五章 泛型