gpt4 book ai didi

java - 接口(interface)演化——继承返回类型

转载 作者:行者123 更新时间:2023-11-29 04:52:51 29 4
gpt4 key购买 nike

我有一个正在开发数据模型的应用程序(该应用程序处理新旧数据)。现在我想用原始返回类型的演变来覆盖方法的返回类型:

public interface Section {

List<Item> getItems();
}

public interface Item {
String getName();
}

public interface ItemEvolution extends Item {
String getEvolution();
}
public interface SectionEvolution extends Section {
List<ItemEvolution> getItems();
}

在这个星座中,我在 getItems() 中得到一个不兼容的返回类型,但我没有破坏父接口(interface),因为 ItemEvolution 扩展了 Item。

我该如何处理?

我正在使用 Java 8

最佳答案

List<ItemEvolution>List<Item> 不兼容(因为您可以向后者添加 Item 而不是前者)。这是泛型的一个常见陷阱。

一种解决方案是使用 List<? extends Item>作为 Section 中父类(super class)的返回类型:

public interface Section {
List<? extends Item> getItems();
}

public interface SectionEvolution extends Section {
// Or List<? extends ItemEvolution> if you might want to override this again.
List<ItemEvolution> getItems();
}

关于java - 接口(interface)演化——继承返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34784567/

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