Java基础之《泛型》

一、泛型概念
泛型就是变量类型的参数化。

二、泛型简单使用
Map<String, String> map = new HashMap<String, String>();
限制了map里只能塞String类型的值。

三、<? extends SomeClass>与<T extends SomeClass>
1、extends的作用
这里的限定使用关键字extends,后面可以是类也可以是接口。但这里的extends已经不是继承的含义了,应该理解为T类型是实现XX接口的类型,或者T是继承了XX类的类型

2、T表示限定类型,?表示通配类型
泛型三种:
ArrayList<T> al=new ArrayList<T>();指定集合元素只能是T类型
ArrayList<?> al=new ArrayList<?>();集合元素可以是任意类型,这种没有意义,一般是方法中,只是为了说明用法
ArrayList<? extends E> al=new ArrayList<? extends E>();
泛型的限定:
? extends E:接收E类型或者E的子类型。
? super E:接收E类型或者E的父类型。

3、通配符,它只能在“<>”中使用
1)方法参数带有通配符会更加通用;
2)带有通配符类型的对象,被限制了与泛型相关方法的使用,只能在<>中使用,不能用与泛型相关的方法;
3)下边界通配符:可以使用返回值为泛型变量的方法;
4)上边界通配符:可以使用参数为泛型变量的方法。

四、泛型类
1、例如
public class Test<T>{
    private T x;
    public Test(T x) {
        this.x = x;
    }
    public T getX() {
        return x;
    }
    public T setX() {
        this.x = x;
    }
}
表示类Test持有一个参数为T类型
在实例化该类时,必须指明泛型T的具体类型,例如:Test<Object> t = new Test<Object>();
指明泛型T的类型为Object。

五、泛型方法
形如public <T> T test(T a)
第一个<T>:声明此方法持有一个类型T,也可以理解为此方法为泛型方法
第二个T:指明该方法的返回值为类型T
第三个T:方法形参为类型T

参考资料:

https://blog.csdn.net/cgf1993/article/details/50754584

https://www.cnblogs.com/fengmingyue/p/6087031.html

猜你喜欢

转载自blog.csdn.net/csj50/article/details/80931789