泛型的由来
通过Object转型问题引入: 早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在隐患,所以Java提供了泛型来解决这个安全问题。
提高安全性(将运行期的错误转换到编译期)
省去强转的麻烦
泛型类
public class 类名<泛型类型1,…>
泛型方法
public <泛型类型> 返回类型 方法名(泛型类型 变量名)
泛型类中的非静态方法最好与类的泛型一致,如果不一致,需要在方法上声明该泛型
静态方法必须声明自己的泛型,必须与类的泛型不一致。因为静态方法是随着类的加载而加载的,而类加载时有可能没有创建对象,所以要提前告诉静态方法他的泛型是什么
泛型接口
public interface 接口名<泛型类型>
泛型高级通配符:
A: 泛型通配符<?>
任意类型,如果没有明确,那么就是Object以及任意的Java类了
B: ? extends E
向下限定,E及其子类
C: ? super E
向上限定,E及其父类