泛型

概述

  • 泛型提供编译时类型安全检测机制
  • 把运行时的可能出现的错误提前到编译期间
  • 泛型分类:泛型类泛型方法泛型接口

泛型规则

  • 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前
  • 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
  • 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
  • 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像 int、double、char 等)。

泛型标记符

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • - 表示不确定的 java 类型

自定义泛型类

  • 格式修饰符 class 类名<标识>{}
  • 范例public class Generic<T>

自定义泛型方法

  • 格式修饰符 <标识> 返回值类型 方法名(类型 变量){}
  • 范例public <T> void show(T t){}

自定义泛型接口

  • 格式修饰符 interface 接口名<标识>{}
  • 范例public interface Generic<T>{}

类型通配符

  • 类型通配符为:<?>, 类型通配符一般是使用 ? 代替具体的类型参数。例如 List 在逻辑上是 List,List 等所有 List<具体类型实参> 的父类。
  • 通配符上限:<? extends 某个类型>表示匹配的类型应该是某个类型或者某个类型的子类
  • 通配符下限:<? super 某个类型>表示匹配的类型应该是某个类型或者某个类型的父类