JAVA 知识点回顾之泛型

概述

  • 泛型可以解决数据类型的安全性问题。原理:在类声明的时候通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型
  • 泛型是在JDK1.5 之后增加的新功能

格式

1.泛型类
  访问权限  class 类名称<泛型,泛型...>{
    
    
        属性
        方法
  }

public class GenericDemo0<T> {
    
    

    private T t;

    public T getT() {
    
    
        return t;
    }

    public void setT(T t) {
    
    
        this.t = t;
    }

    public static void main(String args[]) {
    
    
        GenericDemo0<Integer> i = new GenericDemo0<>();
        i.setT(1);
        System.out.println("-----泛型类--->" + i.getT());

        GenericDemo0<String> str = new GenericDemo0<>();
        str.setT("泛型类");
        System.out.println(str.getT());
    }
}

在类名后面添加了类型参数声明部分.
泛型类的类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开
一个泛型参数,被称为一个类型变量,是用于指定一个泛型类型名称的标识符

对象的创建: 类名称<具体类型> 对象名称=new 类名称<具体类型>()

2.泛型接口
 interface 接口名称<泛型标识>{
    
    }

interface Gen<T> {
    
    
    T call(T t);
}

在接口名称后面加上 < T >

3.泛型方法
 访问权限 <泛型标识> 返回类型 方法名称 ([泛型标识 参数名称]private static <T> void call(T t) {
    
    
   System.out.println("---泛型方法-->" + t);
 }

 private static <E> E[] generCall(E[] array) {
    
    
        System.out.println("---泛型方法-->" + Arrays.toString(array));
        return array;
 }

所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前
类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符
注意类型参数只能代表引用型类型,不能是原始类型

类型通配符

上界通配符

? extends 叫做上界通配符,使 Java 泛型具有协变性。extends 限制了泛型类型的父类型,所以叫上界

List<? extends TextView> textViews = new ArrayList<TextView>(); // 本身
List<? extends TextView> textViews = new ArrayList<Button>(); // 直接子类
List<? extends TextView> textViews = new ArrayList<RadioButton>(); // 间接子类
  • 其中 ? 是个通配符,表示这个 List 的泛型类型是一个未知类型
  • extends 限制了这个未知类型的上界,也就是泛型类型必须满足这个 extends 的限制条件:它的范围不仅是所有直接和间接子类,还包括上界定义的父类本身,也就是 TextView;它还有 implements 的意思,即这里的上界也可以是 interface。
下界通配符

? super 叫做下界通配符,使 Java 泛型具有逆变性。 super 限制了通配符 ? 的子类型,所以称之为下界。

List<? super Button> buttons = new ArrayList<Button>(); // 本身
List<? super Button> buttons = new ArrayList<TextView>(); //  直接父类
List<? super Button> buttons = new ArrayList<Object>(); // 间接父类
  • 通配符 ? 表示 List 的泛型类型是一个未知类型
  • super 限制了这个未知类型的下界,也就是泛型类型必须满足这个 super 的限制条件。super 我们在类的方法里面经常用到,这里的范围不仅包括 Button 的直接和间接父类,也包括下界 Button 本身。super 同样支持 interface
小结

Java 的泛型本身是不支持协变和逆变的,Java 的泛型类型会在编译时发生类型擦除

  • 可以使用泛型通配符 ? extends 来使泛型支持协变
  • 可以使用泛型通配符 ? super 来使泛型支持逆变

猜你喜欢

转载自blog.csdn.net/xufei5789651/article/details/102458176