首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在概念上添加多态性?

如何在概念上添加多态性?
EN

Stack Overflow用户
提问于 2015-11-13 13:19:42
回答 4查看 90关注 0票数 1

我有一个小组项目,其中涉及使用一个Java程序来模拟冰淇淋店,并将其转换为GUI应用程序。

商店预装16种不同的冰淇淋。商店里有工人,也有出纳员和库存员(这两者都来自于工人,出纳员有国际耐性,库存人员有国际耐力)。

工人(因此也就是收银员/存货员)可以提供冰淇淋。只有收银员才能处理订单,只有库存者才能补充冰淇淋(每种冰淇淋从80勺开始)。

在给定的时间里,只有一个活跃的出纳员/库存员,也可能有一个放假的出纳员/库存员。工作人员从一个文件(每一行显式地声明它是工人、存储商或出纳员)加载到他们各自的数组列表中(其中有一个用于工人的ArrayList,一个针对仓库的ArrayList,以及一个用于出纳员的ArrayList )。

现在,我发现把它转换成GUI非常复杂,需要处理3 ArrayLists。我想要更改该项目,以将所有员工保存到一个类型工作人员的ArrayList中。但是,假设有三个不同的ArrayLists,商店中的许多操作已经定义/执行。

更改代码以将整个辅助文件加载到Worker类型的一个ArrayList中很简单。但是,我如何在概念上改变商店的其他功能,使之与一个ArrayList一起工作呢?

例如,如果我想将商店的活动收银员设置为Bill,我如何在ArrayList中导航以只找到出纳员,然后找到Bill,然后将他设置为active?

我想我困惑的是如何与子类的ArrayList交互,并知道在给定时间与哪种类型的子类交互?我知道如何使用instanceOf(),但我觉得它比这更能扩展(没有双关语)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-13 14:05:47

通常,当您想要调用泛型工作者操作(如getPaid()startShift())时,您会遍历一个Worker数组。这些实现可能因特定类的不同而不同(本质上这是多态),但它们对于所有Workers都是常见的。

如果不查看您的代码,那么尝试从工作人员集合中调用CashierStocker特定的方法似乎不太可能带来好处。

票数 3
EN

Stack Overflow用户

发布于 2015-11-13 13:29:18

我认为,将它们全部放在一个集合中比保留单独的列表更有问题。

正如您所提到的,找到一种特殊的类型将是“混乱的”。

如果您有很多其他情况需要迭代所有工作人员,可以考虑将它们都保存在一个额外的集合中,或者创建一个遍历所有三个列表的方法,以便您可以重用。

票数 2
EN

Stack Overflow用户

发布于 2015-11-13 13:32:26

你可以做这样的事

代码语言:javascript
复制
private void processCashiers(){    
    List<Cashier> cashiers = new ArrayList<>();
        for(Worker w : workers){
            if(w instanceof Cashier){
                cashiers.add(w);
            }
        }
    // do something with cashierers here
}

基本上是在本地创建一个指定的列表并进行处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33693666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档