Java编程思想

Java编程思想——第十五章:泛型

2019-06-07  本文已影响0人  代夫阿普曼

泛型实现了 参数化类型 的概念,使代码可以应用多种类型。

多态算是一种泛化机制。将方法的参数类型设为基类,那么该方法就可以接受从这个基类中导出的任何类作为参数。使用基类能够具备更好的灵活性。但是,考虑到除了 final类 不能拓展,其他任何类都可以被拓展,所以这种灵活性大多数时候也会有一些性能损耗。

方法参数是一个接口也会放松限制。可是有时候,即便使用了接口,对程序的约束还是太强了。因为一旦指明接口,它就要求你的代码必须使用特定的接口。而我们希望达到的目的是编写更通用的代码,要使代码能够应用于某种不具体的类型,而不是一个具体的接口或类。

1.与c++的比较

2.简单泛型

创造容器类 是促成泛型出现的一个重要原因。泛型的主要目的之一就是用来指定容器要持有什么类型的对象,而且有编译器来保证类型的正确性。

与其使用Object我们更喜欢暂时不指定类型,而是稍后再决定具体使用什么类型。要达到这个目的,要使用类型参数

public class Holder<T> {
    private T a;
    public Holder(T a) {this.a = a;}
    public void set(T a) {this.a = a;}
    public T get() {return a;}
}
2.1 一个元祖类库
2.2 一个堆栈类

3.泛型接口

4.泛型方法

泛型方法使得该方法能够独立于类而产生变化。如果使用泛型方法可以取代整个类泛型化,那么就应该只使用泛型方法,因为它可以使事情更清楚明白。

4.1 杠杆利用类型参数推断
4.2 可变参数与泛型方法
4.3 用于Generator的泛型方法
public class Generators {
    public static <T> Collection<T> fill(Collection<T> coll, Generator<T> gen, int n) {
        for(int i = 0; i < n; i ++)
            coll.add(gen.next());
        return coll;
    }
}
4.4 一个通用的Generator
public class BasicGenerator<T> implements Generator<T> {
    private Class<T> type;
    public BasicGenerator(Class<T> type) {
        this.type = type;
    }
    public T next() {
        try {
            return type.newInstance();
        } catch(Exception e) {
            throw new RuntimeException(e);
        }
    }
    public static <T> Generator<T> create(Class<T> type) {
        return new BasicGenerator<T>(type);
    }
}

5.匿名内部类

6.构建复杂模型

7.擦除的神秘之处

8.擦除的补偿


07/06/2019 :created,just half.
上一篇下一篇

猜你喜欢

热点阅读