关于泛型的一些问题
程序员文章站
2024-03-14 18:32:16
...
泛型的作用
- 使用泛型的类可以适应更加广泛的类型,制作的工具类能够适配更多的类型。
- 在集合中使用泛型能够在编码阶段实现类型检查,防止类型转换错误。
泛型采用的方法:
类型擦除
为什么使用类型擦除?
为了向前兼容,兼容JDK1.5之前的Java类库。
泛型常见类型及解析(大多数使用在集合当中)
- 字母型(一般用在编写工具类或者接口中):
List<E> 、Map<K,V>等英文字母,字母可以随意定。
常见的字母含义:
T Type表示类型
K V 分辨表示键值对中的key value
E 代表Element
public interface List<E> extends Collection<E>
public interface Map<K,V>
public class Child<E> { //可以在类名后面声明泛型
public <T> E get(T type){//也可以在方法前面声明泛型
return null;
}
}
- 通配符类型(一般用在实例化泛型类的时候):
List<?>
List<?> list = new ArrayList<>();
Apple apple = new Apple();
list.add(apple);//当使用通配符的List第一次放入Apple对象后,该List就会被确定为Apple类型
//触发类型检查机制,后续只能存入Apple类型的对象,否则无法通过编译器编译
- 上界通配符<? extends A>和下界通配符<? super B>
class Fruit;
class Apple extends Fruit;
List<Apple> apples = new ArrayList<>();
List<Fruit> fruits = apples;//报错
List<? extends Fruit> fruits = apples;//编译通过
List<Fruit> fruits = new ArrayList<>();
List<Apple> apples = fruits;//报错
List<? super Apple> apples = fruits;//编译通过
<? extends A>可以将A的任一子类类型放入到集合中。
<? super B>可以将B的任一父类类型放入到集合中。
上一篇: B. Box Fitting