gpt4 book ai didi

java - 类型继承问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:53:03 26 4
gpt4 key购买 nike

我真的不知道如何解释我遇到的问题。下面是我拥有的一些对象的示例。

假设我有课

public class Foo{}
public class FooBar extends Foo{}

所有这一切都很好,但是如果我拿一个列表并说我希望它充满 Foo 对象,我不能为它提供 FooBar 对象。这是为什么?

例子:

List<Foo> fooList = Arrays.asList(new FooBar());

如果 FooBar extends Foo,为什么它不能转换回 Foo

最佳答案

如评论中所述Arrays.asList(T...)返回 List<T> .因为你通过了FooBar使用 Java 7 对该方法类型推断的实例 FooBar输入 T表示此方法返回 List<FooBar>不能分配给 List<Foo> (您可以在以下位置阅读更多相关信息:Is List<Dog> a subclass of List<Animal>? Why aren't Java's generics implicitly polymorphic?)

在 Java 8 中,类型推断得到改进,使 lambda 更有用。现在T不仅从参数推断类型,而且从目标推断类型 - 应该保存结果的引用变量。这允许 T推断Foo来自 List<Foo> fooList而不是 new FooBar()争论。

要解决早期版本中的这个问题,例如您的 Java 7,您可以显式为泛型方法设置泛型类型 asList喜欢

List<Foo> fooList = Arrays.<Foo>asList(new FooBar());
// ^^^^^ -- set generic types before method name

更多信息请访问:https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html (特别是“目标类型”部分)

关于java - 类型继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47667273/

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