gpt4 book ai didi

Java OO设计: interfaces and lists

转载 作者:行者123 更新时间:2023-12-02 00:41:15 25 4
gpt4 key购买 nike

假设我有一个名为 MemberNio 的类(包含 SocketChannel 和其他 nio 特定对象),它扩展了 Member 类。

方法 getMember(id)getMembers 返回 MemberNio 对象。我的应用程序的各个层不需要了解有关 Nio 的任何内容,只需调用 getMember 方法即可获取成员并使用父类(super class)型 Member:

Member member = membersMgr.getMember(id);

但是当我尝试调用getMembers时出现问题:

List<Member> members =  membersMgr.getMembers(); // <- error, can't cast List<MemberNio> to List<Member>

这将迫使我拥有 MemberNio 对象,而我只应该了解 Member 对象。

当我使用列表和接口(interface)/suptypes 时,这是一个反复出现的问题。

最佳答案

您可以使用:-

List<? extends Member> members =  membersMgr.getMembers();
for (Member member: members) {
if (member instanceof MemberNio) {
MemberNio memNio = (MemberNio)member;
/** Do your stuff **/
}
}

为了使用增强for循环获取成员,我们使用了以下概念:- 指向子类对象的 super 类型引用。因此,无论列表中存储哪些子类对象,我们总是使用父类(super class)引用来指向它们。然后通过检查实际的实例类型来进行相应的TypeCast..

并使 getMembers() 的返回类型相同......这样就可以了。

这样你就可以返回 MemberList 或任何扩展你的 Member 类的类。而且你不需要给出明确这些类的名称..

关于Java OO设计: interfaces and lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12607091/

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