当前位置: 首页 > 后端技术 > Java

Java泛型上下界(上下界)

时间:2023-04-01 21:46:09 Java

publicclassTest_2{publicstaticvoidmain(String[]args){Listlist1=newArrayList<>();//上限列表list2=newArrayList<>();//下界Aa=newA();Bb=新B();Cc=新C();对象o=新对象();//列表1。添加(o);不能添加元素,因为无法确定List中B的具体子类//list1.add(a);//list1.add(b);//list1.add(c);o=list1.get(0);a=list1.get(0);b=list1.get(0);//c=list1.get(0);编译错误,编译器无法向下转换//list2.add(o);编译错误,//list2.add(a);因为无法确定List中B的具体父类list2.add(b);list2.add(c);o=list2.get(0);//a=list2.get(0);编译错误,因为无法确定List中B的具体父类,无法向下转型,而Object是所有类的父类//b=list2.get(0);//c=list2.get(0);}}classA{}classBextendsA{}classCextendsB{}Upperbound上界用extends关键字声明,表示参数化类型可能是指定的类或者它的任意子类。例如,,泛型的上界是classB。形如List,具体是哪个无法确定,可以是B也可以是C。在尝试执行add()方法时,无法确定List中的类型是哪个,所以会编译报错.在执行get()方法时,无论是B还是C,都可以作为A类的对象接收。所以List不能添加元素,具有只读属性,只能获取。下界下界是用super关键字声明的,表示参数化类型可以是指定类型或其任何超类。例如,泛型的下界是classB。形如List,具体是哪个无法确定,可以是B也可以是A,直到Object类为止。在尝试执行add()方法时,虽然无法确定List的具体类型,但是根据多态性,B类及其子类的对象肯定可以赋值给B的对象,所以只能添加B类及其子类目的。当试图执行get()方法时,List中的类型是B类或其父类的特定类型,一直到Object类,所以获取到的元素只能赋值给Object对象。以上内容是我个人测试后的总结,如有错误请见谅。