第六章:泛型程序设计
为什么要用泛型
- 提高程序易读性,提高程序安全性,限制参数类型。
定义泛型
-
定义一个简单得泛型类
public class Demo<T>{ private T name; public Demo(){}; public Demo(T name){ this.name = name; } public void setName(T name){ this.name = name; } public T getName(){ return name; } } Demo<String> demo = new Demo("Alan"); T就代表实例化类得时候传进来得参数类型,不可以传基本类型,可以传基本类型的封装类;
-
定义一个泛型方法
class ArrayAlg{ public static<T> T getMiddle(T...a){ return a[2] } }
通配符类型
-
通配符概念:在通配符类型中,允许参数发生变化,例如Pair<? extends Employee>表示任何泛型Pair类型
-
通配符的超类型限定:
? super Manger
-
例子:
public static void minmaxBonus(Manager[] a,Pair<? super Manager> result){ if(a.length == 0 )return; Manager min =a[0]; Manager max = a[0]; for(int i = 1; a < a.length;i++){ if(min.getBonus() > a[i].getBonus()) min = a[i]; if(max.getBonus() < a[i].getBonus()) max = a[i]; } result.setFirst(min); result.setSecond(max); }
public interface Comparable<T>{ public int compareTo(T other) //限定传入的类型为T,比如传string 那就直接收string }
约定俗成的泛型
- E:element(在集合中使用,因为集合中存放的是元素)
- T:Type(java类)
- K:key(键)
- V:value(值)
- N:number(数字类型)
- ?:不确定的java类型
<? extends T>和<? super T>的区别
- <? extends T>表示该通配符所代表的类型是T类型的子类。
- <? super T>表示该通配符所代表的类型是T类型的父类。