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

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

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 {
    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  void f(T x){
}


15.5 匿名内部类

public static Generator generator{
    return new Genrator{
        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{
    void f(List) {}
    void f(List) {}
}
  • 基类劫持了接口
    15.2 自限定的类型
class SelfBounded< T extends SelfBounded<T>>{

}

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


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


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

你可能感兴趣的:(Java编程思想,Thinking,in,Java)