Thinking in Java——第十五章-泛型

来源:互联网 发布:黄金家族软件 编辑:程序博客网 时间:2024/05/17 06:35

第十一章讲过泛型对于代码的安全很有用处。
书中第十五章讲述了大量的篇幅,我这里就简单的介绍一下。(个人泛型用的不多,体会不深,然后书中讲的也没有给我太多启迪)

15.1 与C++的比较
C++中的模板


15.2 简单泛型

public class Holder{    private Object a;    public Holder (Object a) { this.a = a; }    public void set(Object a) { this.a = a; }    public Object get(){ return a; }}

上面这个类就可以接收所有类型
15.2.1 一个元组类库

package com.sdkd.hms12;public class C <A, B>{    public final A first;    public final B second;    public C(A a, B b){        first = a;        second = b;    }}

15.3 泛型接口

interface<T>{ T next(); }

返回类型都是T类型的


15.4 泛型方法

public <T> void f(T x){}


15.5 匿名内部类

public static Generator<Customer> generator{    return new Genrator<Customer>{        public Customer next(){ return new Customer(); }    }}

15.6 构建复杂模型

public class TupleList<A, B, C, D> extends ArrayList<FourTuple<A, B, C, D>>{}

15.7 擦除的神秘之处

Class c1 = new  ArrayList<String>().getClass();Class c2 = new  ArrayList<Integer>().getClass();

c1 == c2, 是个谜题~



15.8
擦除的补偿
引入类型标签


15.9 边界

class Colored <T extends HasColor>{}

T需要时HasColor的子类


15.10 通配符

List< ? extends Fruit>

15.11 问题

  • 任何基本类型都不能作为类型参数
  • 一个类不能实现同一个泛型接口的两种变体
  • 由于擦除,instanceof是没用的
  • 下面的代码是不能编译的
public class UseList<W, T>{    void f(List<T>) {}    void f(List<W>) {}}
  • 基类劫持了接口
    15.2 自限定的类型
class SelfBounded< T extends SelfBounded<T>>{}

它强调的是当extends用于边界与创建子类是不同的。


15.3 动态类型安全
查看checkedCollection等。异常类型ClassCastException


15.14 异常
15.15 混型
15.16 潜在类型机制
15.17 对潜在类型机制的补偿
15.18 将函数对象用作策略

0 0
原创粉丝点击