Java泛型相关知识
Java泛型是JDK1.5之后提出的新概念,本意是让同一套代码可以适应更多的类型。
在没有泛型之前一旦某个接口定义了参数为某个类型,则实现了该接口的方法必须采用同样类型参数,不利于程序的扩展。
泛型带来的好处:(主要是为了更好的创建容器类)
- 比如在创建容器的时候,指定容器持有何种类型,以便在编译期间就能够保证类型的正确性,而不是将错误留到运行的时候。
- 无论是创建类、方法的时候都可以泛化参数,可以做到代码的复用
缺点:
使语言复杂化,并使代码复杂化
什么是类型擦除?
jdk是通过类型擦除来实现泛型的,编译器在编译之后会擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。比如如果编写 List<String> list = new Arraylist<>();
在运行的时候,仅用List来表示。
为什么要用类型擦除?
这么做是为了向前兼容,为了兼容jdk1.5以前的程序,确保能和Java 5之前的版本开发二进制类库进行兼容。
什么是限定通配符和非限定通配符?
限定通配符,也叫上边界通配符。是限定类型必须是某一个类型的子类。
比如:List<? extends A> list
,表示具有任何从A继承的类型的列表。
而非限定通配符(下边界通配符):<? super A> 确保类型必须是A的父类来设定类型的下界。