gpt4 book ai didi

java 泛型 - 一个 impl 类,多个 View

转载 作者:行者123 更新时间:2023-11-30 09:57:53 25 4
gpt4 key购买 nike

我有如下定义的接口(interface),并由单个类 MatchedAddressImpl 实现。

interface MatchedAddress extends HouseHelpData, StreetHelpData, TownHelpData

public class MatchedAddressDetails implements MatchedAddress

应该向客户端提供相同 MatchedAddressImpl 的不同 View (HouseHelpData 或 StreetHelpData 或 TownHelpData 或 MatchedAddress)。因此,我为客户提供了以下 API。

public List<MatchedAddress> matchedAddresses()
public List<? extends HouseHelpData> houseHelpData()
public List<? extends StreetHelpData> streetHelpData();
public List<TownHelpData> townHelpData();

问题是客户端需要执行类似下面的操作,我读到返回类型不应包含通配符的无效 java,因为客户端使用看起来很丑陋...如果有人可以帮助我改进 API,我将不胜感激。我想要的是从上述方法中删除通配符。

List<? extends StreetHelpData> streetHelpDataList = details.streetHelpData();

最佳答案

在大多数情况下,正确的用法就是 List<StreetHelpData> .您仍然可以放置 StreetHelpDataImpl 类型的对象,例如。

在我看来,通配符具有误导性。基本上,对于 List<? extends StreetHelpData>这意味着:“此列表包含所有特定类型的元素,该类型是 StreetHelpData 的子类型。”

通配符示例:

考虑:

class Animal {}
class Lion extends Animal {}
class Tiger extends Animal {}

列表List<? extends Animal>包含 Lions只有 ( List<Lion> ), Tigers仅 ( List<Tiger> ),或两者 ( List<Animal> )。但是,列表 List<Animal>可以包含各种 Animals - Lions和/或 Tigers - 在任何时候。

(感谢 Tom Hawtin 的指点)

关于java 泛型 - 一个 impl 类,多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1384553/

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