List <t>的行为与List <!-?超级T->

时间:2018-12-06 02:55:39

标签: java generics java-8

读一本老书“用Java思考”:

static <T> void writeExact(List<T> list, T item) {
    list.add(item);
}
static List<Apple> apples = new ArrayList<Apple>();
static List<Fruit> fruits = new ArrayList<Fruit>();
static void f1() {
    writeExact(apples, new Apple());
    // writeExact(fruits, new Apple()); // Error:   <<
    // Incompatible types: found Fruit, required Apple
}

当我使用Java 8运行同一程序时,它运行良好-传递fruits, new Apple()时没有错误,即,现在也可以像您一样将Apple放入List<Fruit>期望

我想知道从什么版本开始这种行为已经改变。显然,这种新行为的确使我们使用了比通配符通用形式List<T>更紧凑的通用形式List<? super T>

更重要的是,随着行为的改变,我们还能维持吗?

  

“超类型限制 relax 对您可以传递给   方法”

0 个答案:

没有答案