gpt4 book ai didi

java - 为什么不能将具有其他类型的实例分配给参数化变量?

转载 作者:行者123 更新时间:2023-12-02 06:04:10 26 4
gpt4 key购买 nike

为什么我不能这样做:

LinkedList<Fruit> myFruits = new LinkedList<Apple>();

错误信息:

Type mismatch: cannot convert from LinkedList<Apple> to LinkedList<Fruit>

跟下面的有什么区别?

Fruit fruit = new Apple();

最佳答案

考虑一下您可以用 LinkedList<Fruit> 做什么- 并考虑您希望这段代码做什么:

LinkedList<Apple> apples = new LinkedList<Apple>();
LinkedList<Fruit> fruits = apples;
fruits.add(new Banana());

Apple apple = apples.getFirst(); // Safe at compile time, but it's a Banana!

转换是唯一在编译时失败有意义的地方。现在你可以写的是:

LinkedList<? extends Fruit> myFruits = new LinkedList<Apple>();

... 然后编译器不会让您向列表添加 任何内容,因为它不知道真正的元素类型是什么。同样你可以写:

LinkedList<? super Apple> apples = new LinkedList<Fruit>();

现在您可以添加 苹果到列表中,但是您不能列表中取出苹果,因为您也不知道类型是什么.

关于java - 为什么不能将具有其他类型的实例分配给参数化变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14141524/

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