在面向对象中,多态是一种泛化机制。比如:
private static void f(Object o){
System.out.println(o.hashCode());
}
f("a");
定义的方法参数是父类,在调用这个方法的时候可以用它的子类。【这是用类继承的一种方式】还有一种方式是方法的参数是一个接口,然后调用这个方法的时候传递进去的是实现了这个接口的类。
这两种方案都是需要在我们调用方法的时候传递进去继承或实现接口的类。这样是不够灵活的。
15.2 泛型怎么来的
大家有没有想过JAVA的作者为什么要设计泛型?
比如我有一个容器(List列表吧),我想放不同类型的对象(比如想放一个Student对象、Teacher对象)。那这个容器能支持吗?
大家可能会说可以支持,比如我们定义一个List<Object>那是不是都可以往里面存呢。当然是可以的。那有没有一种更好的办法呢?
对了,我们可以先不指定类型,而是再稍后再决定具体要使用哪种类型。那要怎么才能做到?这个时候就引入了所谓的类型参数。List<T>类似这样的
定义的时候先用T这样占着,等到要使用的时候再换成具体的子类即可。
举个例子,写一个元组
class Tuple<T,F> {
public final T object1;
public final F object2;
public Tuple(T a,F b){
object1=a;
object2=b;
}
}
定义的时候先写入类型参数 。在具体用的时候再赋具体的类型参数进去。
15.3 泛型接口
那我们在写面向对象代码的时候,有没有考虑过在接口上面定义泛型呢。其实也是可以的。
15.4 泛型方法
记住!只要你能做到,你就尽量使用泛型方法。<T> void f(T x) 把泛型参数置于返回值之前