数组不能向上转型
package com.thinking.in.java.course.chapter15.two;import com.thinking.in.java.course.chapter11.testArrays.App;import java.util.ArrayList;import java.util.Arrays;import java.util.List;class Fruit{}class Apple extends Fruit{}class Jonathan extends Apple{}class Orange extends Fruit{}public class CovarianArrays {public static void main(String[] args) {//Fruit[] fruits = new Apple[10];//fruits[0] = new Apple();fruits[1] = new Jonathan();try {fruits[0] = new Fruit();}catch (Exception e){System.out.println(e);}try {fruits[0] = new Orange();}catch (Exception e){System.out.println(e);}//泛型容器 在编译器就已经检测到异常了List<? extends Fruit> fruitList = new ArrayList<Fruit>();System.out.println(fruitList.contains(new Apple()));List<? extends Fruit> list = Arrays.asList(new Apple());//list.add(new Apple());Apple apple = (Apple)list.get(0);list = Arrays.asList(new Fruit());System.out.println(list.contains(apple));System.out.println(list.indexOf(apple));}}


public class GenericAndCovariance {public static void main(String[] args) {//无法添加任何数据List<? extends Fruit> fruitList = new ArrayList<Fruit>();//fruitList.add(new Apple());//fruitList.add(new Fruit());//fruitList.add(new Orange());//fruitList.add(new Jonathan());fruitList.add(null);//因为contains方法的参数为Object类下 可以使用fruitList.contains(new Apple());}}
超类通配符
List<? super ClassType> : 从类的继承关系来看的话,ClassType为上界,可以执行添加操作。注意与👆例子的区别
public class SuperTypeWilds {public static void main(String[] args) {List<? super Fruit> list = new ArrayList<>();System.out.println(Arrays.toString(list.getClass().getTypeParameters()));list.add(new Apple());list.add(new Jonathan());list.add(new Fruit());System.out.println(list);List<? extends Fruit> eList = new ArrayList<>();//eList.add(new Apple());}}
