您的位置:首页 > 编程语言 > Java开发

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

2016-08-12 20:51 218 查看
第十一章讲过泛型对于代码的安全很有用处。

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

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 将函数对象用作策略
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  泛型 class