gpt4 book ai didi

java - 通用下限通配符与上限通配符

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:38 24 4
gpt4 key购买 nike

import java.util.List;
import java.util.ArrayList;

interface Canine {}
class Dog implements Canine {}
public class Collie extends Dog {
public static void main(String[] args){
List<Dog> d = new ArrayList<Dog>();
List<Collie> c = new ArrayList<Collie>();
d.add(new Collie());
c.add(new Collie());
do1(d); do1(c);
do2(d); do2(c);
}
static void do1(List<? extends Dog> d2){
d2.add(new Collie());
System.out.print(d2.size());
}
static void do2(List<? super Collie> c2){
c2.add(new Collie());
System.out.print(c2.size());
}
}

这个问题的答案告诉我们,当一个方法采用通配符泛型类型时,可以访问或修改集合,但不能同时访问或修改两者。 (凯西和伯特)

当一个方法采用通配符泛型类型时,可以访问或修改集合,但不能同时访问或修改这两者”是什么意思?

据我所知,方法 do1 有 List<? extends Dog> d2所以d2只能访问不能修改。方法 d2 有 List<? super Collie> c2所以c2可以被访问和修改,没有编译错误。

Generic guidelines

最佳答案

您不能添加 CatList<? extends Animal>因为你不知道那是什么样的 list 。那可能是 List<Dog>还。所以你不想扔你的 Cat进入Black Hole .这就是为什么 modificationList以这种方式声明是不允许的。

类似地,当你从 List<? super Animal> 中取出一些东西时,你不知道你会从中得到什么。你甚至可以获得 Object ,或 Animal .但是,您可以添加 Animal安全地在这个List .

关于java - 通用下限通配符与上限通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12894335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com