gpt4 book ai didi

java - 使用泛型时复合模式的可扩展性

转载 作者:行者123 更新时间:2023-11-30 06:13:20 25 4
gpt4 key购买 nike

想象一下以下类型的对象层次结构:

Group
Person
Address

然后是一些类的实现:

ImmutableGroup
PeopleyPerson
MonsterPerson
PostalAddress
getZip() :: String
EmailAddress
getDomain() :: String

我们希望允许此 API 的客户端以类型安全的方式使用类型。所以客户可能想要这样做:

group.personAt(0).getAddress().getDomain()

他们可以做到这一点,因为 Group 定义为:

Group<? extends PeopleyPerson<EmailAddress>> group

这意味着组必须定义为:

interface Group<A extends Address,P extends Person<A>>

我们必须让 Group 了解地址,即使它没有出现在其“运行时”API 中。

我闻到了这种味道。这意味着对类型层次结构的任何进一步添加都要求所有父级也在其泛型声明中表示添加的类型。

有办法解决这个问题吗?

最佳答案

有就够了

interface Group<P extends Person<?>>

然后使用组合层次结构中的具体类型定义实际的组实例:

Group<PeopleyPerson<EmailAddress>> group

这样,API 的使用者将在所使用的类型上具有类型安全性,同时维护层次结构中的每个接口(interface)(例如组、人员、地址),与直接子级之外的类型无关。

查看此类实现的示例 here

关于java - 使用泛型时复合模式的可扩展性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49797917/

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