建网站用哪个好,网页制作下载安装包,越秀重点场所,网站设计培训学校有哪些Java中#xff0c;泛型用于编译阶段限制集合中元素的类型#xff0c;或者限制类中某个属性的类型#xff0c;编译过程中发生类型擦除#xff0c;最终还是Object类型。
1. 集合中的泛型
集合默认可以存储任何类型的元素#xff0c;即Object类型#xff0c;当使用一个集合…Java中泛型用于编译阶段限制集合中元素的类型或者限制类中某个属性的类型编译过程中发生类型擦除最终还是Object类型。
1. 集合中的泛型
集合默认可以存储任何类型的元素即Object类型当使用一个集合存储String类型元素时
不使用泛型 List list new ArrayList();list.add(a);// 当使用集合中的元素时需要手动进行类型转换String str0 (String) list.get(0);// 而且无法保证集合的正确性list.add(123);// 运行时报错类型转换异常 ClassCastExceptionString str1 (String) list.get(1);使用泛型 ListString list new ArrayList();list.add(a);// 当使用集合中的元素时通过泛型可以确定集合中都是指定类型故不需要手动进行类型转换String str0 list.get(0);// list.add(123); // 编译不通过2. 类中泛型
类中使用泛型与集合中同理使用泛型可以避免使用时的手动强制转换并保证数据的合法性。
不使用泛型 public static void main(String[] args) {Box box new Box(abc);String value (String) box.getValue();box.setValue(123);// 运行时报错类型转换异常 ClassCastExceptionvalue (String) box.getValue(); }static class Box {private Object value;public Box(Object value) {this.value value;}public Object getValue() {return value;}public void setValue(Object value) {this.value value;}}3. 使用泛型 public static void main(String[] args) {BoxString box new Box(abc);String value box.getValue();// box.setValue(123); 编译不通过}static class BoxT {private T value;public Box(T value) {this.value value;}public T getValue() {return value;}public void setValue(T value) {this.value value;}}3. 和 extends 和 super
? 表示不确定的类型通常配置 extends 或 super限制泛型的范围 public static void main(String[] args) {// ? extends AnimalList? extends Animal extendsList new ArrayList();// List? extends Animal 只允许读取因为集合中的元素肯定是Animal或其子类Animal animal extendsList.get(0); // List? extends Animal 不允许新增因为只知道集合中的元素肯定是Animal或其子类但无法确定类型的下限// extendsList.add(new Cat()); // ? super AnimalList? super Animal supperList new ArrayList();// List? super Animal 允许新增Animal的子类因为集合中的元素肯定是Animal或其父类supperList.add(new Cat());// List? super Animal 不允许读取为Animal因为集合中的元素肯定是Animal或其父类类但无法确定类型的上限// Animal animal supperList.get(0); // 但是可以读取为Object因为Object是所有类的父类Object object supperList.get(0); // 通配符?List? list new ArrayList();// List? 相当于 List? extends Object只允许读取为Object不允许新增list.get(0);}static class Animal {}static class Cat extends Animal {}static class Dog extends Animal {}参考
https://blog.csdn.net/anlian523/article/details/1008655385538