泛型的使用
泛型的好处是在编译的时候进行类型安全检查,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。
泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法
泛型类
泛型类的最基本写法
class 类名称 <泛型标识:可以随便写任意标识号,标识指定的泛型的类型>{
private 泛型标识 /(成员变量类型)/ var;
.....
}
}
//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
//在实例化泛型类时,必须指定T的具体类型
public class Generic<T>{
//key这个成员变量的类型为T,T的类型由外部指定
private T key;
public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
this.key = key;
}
public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
return key;
}
}
泛型方法
声明一个泛型方法很简单,只要在返回类型前面加上一个类似<K, V>的形式就行了
public class Util {
public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
return p1.getKey().equals(p2.getKey()) &&
p1.getValue().equals(p2.getValue());
}
}
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public void setKey(K key) { this.key = key; }
public void setValue(V value) { this.value = value; }
public K getKey() { return key; }
public V getValue() { return value; }
}
通配符
在java泛型中,? 表示通配符,代表未知类型,< ? extends Object>表示上边界限定通配符,< ? super Object>表示下边界限定通配符。
1, 限定通配符总是包括自己
2,上界类型通配符:add方法受限, 不能够确定实例化对象的具体类型,因此无法add具体对象至列表中。
3,下界类型通配符:get方法受限,获取的值存在不确定性,子类对象的引用无法赋值给兄弟类的引用,父类对象的引用无法赋值给子类的引用,因此语句错误。
4,如果你想从一个数据类型里获取数据,使用 ? extends 通配符
5,如果你想把对象写入一个数据结构里,使用 ? super 通配符
6,如果你既想存,又想取,那就别用通配符
7,不能同时声明泛型通配符上界和下界
网友评论