泛型

2018-08-22  本文已影响0人  笨笨哒2018

泛型的使用

泛型的好处是在编译的时候进行类型安全检查,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。
泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法

泛型类

泛型类的最基本写法

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,不能同时声明泛型通配符上界和下界

上一篇 下一篇

猜你喜欢

热点阅读