gpt4 book ai didi

Java:使用instanceof暴露不同的对象方法

转载 作者:行者123 更新时间:2023-11-29 07:16:26 25 4
gpt4 key购买 nike

我读过这篇文章 http://www.javapractices.com/topic/TopicAction.do?Id=31 ,它说使用 instanceof 事先检查我的对象是什么是一种不好的做法。

但在这种情况下我不知道该怎么做:我有一个返回项目列表的 API。此项目列表返回用户和管理员

如果我转换像 (User)item 这样的项目,我将在它遇到管理员时立即出现 ClassCastException

for(Item item : items){                     
if (item instanceof User){
((User)item).getName());
((User)item).getEmail());
}
else if (item instanceof Admin){
((Admin)item).getName());
((Admin)item).getEmailList().getPrimary());
}
}

因为它是一个 API 我不能修改 Item,Item 没有子项上的方法,并且电子邮件检索方法不同。我还有别的选择吗?

最佳答案

定义一个包含所有常用方法的接口(interface),让 User 和 Admin 类实现该接口(interface),并在这些情况下仅使用该接口(interface)来访问您的对象。

编辑(因为您无法更改 API)

备选方案是:

  1. 坚持您当前的解决方案。这似乎是最好的交易。

  2. 定义一个接口(interface),创建两个实现这个接口(interface)的包装类并包装原始对象。从 OOP 的角度来看,这更干净,但我认为这在您的情况下有点过大,但这确实取决于情况。

  3. 理论上(!):您也可以使用反射,但不要这样做 - 它会使代码更糟糕 - 尤其是当只有两个不同的编译时已知 项目子类型

关于Java:使用instanceof暴露不同的对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9220176/

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