我已经阅读了这篇文章http://www.javapractices.com/topic/TopicAction.do?Id=31,它说使用instanceof预先检查我的对象是不好的做法.
但是在这种情况下我不知道怎么做:我有一个返回项目列表的API.此项列表返回用户和管理员
如果我投射一个像(用户)项目的项目,一旦它到达管理员,我将有一个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());
}
}
Run Code Online (Sandbox Code Playgroud)
由于它是一个API,我不能修改Item,Item没有关于childs的方法,而且email检索方法不同.我还有其他选择吗?
使用所有常用方法定义接口,让User和Admin类实现该接口,并在这些情况下仅使用该接口来访问对象.
编辑(因为你无法更改API)
替代选择是:
坚持你当前的解决方案.这似乎是最好的交易.
定义一个接口,创建两个实现此接口的包装类并包装原始对象.从OOP的角度来看,这更干净,但我认为在你的情况下这有点过大,但它确实取决于.
理论(!):你也可以使用反射,但不要这样做 - 它会使代码更加糟糕 - 尤其是当只有两个不同的编译时已知的 Item子类型时
| 归档时间: |
|
| 查看次数: |
904 次 |
| 最近记录: |