我有一个小组项目,其中涉及使用一个Java程序来模拟冰淇淋店,并将其转换为GUI应用程序。
商店预装16种不同的冰淇淋。商店里有工人,也有出纳员和库存员(这两者都来自于工人,出纳员有国际耐性,库存人员有国际耐力)。
工人(因此也就是收银员/存货员)可以提供冰淇淋。只有收银员才能处理订单,只有库存者才能补充冰淇淋(每种冰淇淋从80勺开始)。
在给定的时间里,只有一个活跃的出纳员/库存员,也可能有一个放假的出纳员/库存员。工作人员从一个文件(每一行显式地声明它是工人、存储商或出纳员)加载到他们各自的数组列表中(其中有一个用于工人的ArrayList,一个针对仓库的ArrayList,以及一个用于出纳员的ArrayList )。
现在,我发现把它转换成GUI非常复杂,需要处理3 ArrayLists。我想要更改该项目,以将所有员工保存到一个类型工作人员的ArrayList中。但是,假设有三个不同的ArrayLists,商店中的许多操作已经定义/执行。
更改代码以将整个辅助文件加载到Worker类型的一个ArrayList中很简单。但是,我如何在概念上改变商店的其他功能,使之与一个ArrayList一起工作呢?
例如,如果我想将商店的活动收银员设置为Bill,我如何在ArrayList中导航以只找到出纳员,然后找到Bill,然后将他设置为active?
我想我困惑的是如何与子类的ArrayList交互,并知道在给定时间与哪种类型的子类交互?我知道如何使用instanceOf(),但我觉得它比这更能扩展(没有双关语)?
发布于 2015-11-13 14:05:47
通常,当您想要调用泛型工作者操作(如getPaid()或startShift())时,您会遍历一个Worker数组。这些实现可能因特定类的不同而不同(本质上这是多态),但它们对于所有Workers都是常见的。
如果不查看您的代码,那么尝试从工作人员集合中调用Cashier或Stocker特定的方法似乎不太可能带来好处。
发布于 2015-11-13 13:29:18
我认为,将它们全部放在一个集合中比保留单独的列表更有问题。
正如您所提到的,找到一种特殊的类型将是“混乱的”。
如果您有很多其他情况需要迭代所有工作人员,可以考虑将它们都保存在一个额外的集合中,或者创建一个遍历所有三个列表的方法,以便您可以重用。
发布于 2015-11-13 13:32:26
你可以做这样的事
private void processCashiers(){
List<Cashier> cashiers = new ArrayList<>();
for(Worker w : workers){
if(w instanceof Cashier){
cashiers.add(w);
}
}
// do something with cashierers here
}基本上是在本地创建一个指定的列表并进行处理。
https://stackoverflow.com/questions/33693666
复制相似问题