泛型
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
泛型中通配符
- E - Element (在集合中使用,因为集合中存放的是元素)
- T - Type(Java 类)。T 是一个 确定的 类型,通常用于泛型类和泛型方法的定义
- K - Key(键)
- V - Value(值)
- N - Number(数值类型)
- ?- 表示不确定的 java 类型。?是一个 不确定 的类型,通常用于泛型方法的调用代码和形参,不能用于定义类和泛型方法。
泛型类
泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。
类型通配符
类型通配符一般是使用 ? 代替具体的类型参数。例如 List<?>在逻辑是 List,List 等所有 List<具体类型实参> 的父类。
- 带通配符的引用之间赋值必须相容
- 泛型只存在于编译期中,其实本文大部分例子都是在分析编译器给泛型的静态检查。
- 通配符使得泛型类获得了协变和逆变的效果。
- 协变:如果某个返回的类型可以由其派生类替换,那么这个类型就是支持协变的。
- 逆变:如果某个参数类型可以由其基类替换,那么这个类就是支持逆变的
- 但通配符也会对读操作或写操作产生限制。
- 泛型方法和泛型类中只是使用了类型参数的方法
总结:今天内容看的挺懵的,还是基础不行。