java基础-泛型

2020-02-19  本文已影响0人  16325

泛型类

泛型类(generic class) 就是具有一个或多个类型变量的类。一个泛型类的简单例子如下:

//常见的如T、E、K、V等形式的参数常用于表示泛型,编译时无法知道它们类型,实例化时需要指定。
public class Pair <K,V>{
    private K first;
    private  V second;

    public Pair(K first, V second) {
        this.first = first;
        this.second = second;
    }

    public K getFirst() {
        return first;
    }

    public void setFirst(K first) {
        this.first = first;
    }

    public V getSecond() {
        return second;
    }

    public void setSecond(V second) {
        this.second = second;
    }

    public static void main(String[] args) {
    // 此处K传入了Integer,V传入String类型
        Pair<Integer,String> pairInteger = new Pair<>(1, "第二");
        System.out.println("泛型测试,first is " + pairInteger.getFirst()
                + " ,second is " + pairInteger.getSecond());
    }
}

泛型接口

public interface Generator<T> {
    T next();
}

实现类去实现这个接口的时候,可以指定泛型T的具体类型。

public class NumberGenerator implements Generator<Integer> {
    
    @Override
    public Integer next() {
        return new Random().nextInt();
    }
}

泛型方法

具有一个或多个类型变量的方法,称之为泛型方法。

public class GenericMethods {

    public <T> void f(T x){
        System.out.println(x.getClass().getName());
    }

    public static void main(String[] args) {
        GenericMethods gm = new GenericMethods();
        gm.f("字符串");
        gm.f(666);
    }
}

泛型通配符

我们定义泛型时,经常碰见T,E,K,V,?等通配符。本质上这些都是通配符,是编码时一种约定俗成的东西。当然,你换个A-Z中另一个字母表示没有关系,但是为了可读性,一般有以下定义:
+? 表示不确定的 java 类型

通配符通常分三类:

1 注意:?代表任意类型,实际上可以把它看成是一种具体的类型,比如String,Integer
2 T可以出现在,泛型定义,不能用在泛型的具体指定。
3 ?可以看成是String,所以可以用在方法参数中的泛型指定,实例化时的泛型指定。
4 ?可以看成是Object,但是?的泛型指定,不能放入Object

PECS

总结

上一篇 下一篇

猜你喜欢

热点阅读