【发布时间】:2014-01-30 02:30:24
【问题描述】:
我有以下收藏:
private Map <String, Staff> staff;
实现为 TreeMap:
staff = new TreeMap <String, Staff> ();
我需要遍历此映射中的值,但是当我尝试以下代码时,我遇到了不兼容的类型编译错误。我不明白为什么会这样;我地图中的值是 Staff 对象和
it.HasNext()
应该将它们返回以存储在 staffMember 变量中,据我所知,这应该没问题?非常感谢帮助。
Collection <Staff> staffList = staff.values();
Iterator it = staffList.iterator ();
while ((isJobAssigned = false) ||it.hasNext())
{
Staff staffMember = it.next();
if ((staffMember instanceof Typist) && (jobType.equalsIgnoreCase("Typist")))
{
newJob.setJobState ("Assigned");
staffMember.setState("Working");
return newJon.getJobNo() + " Staff allocated: " + staffMember.getName () + ", ID: " + staffMember.getId();
}
【问题讨论】:
-
使用
instanceof是代码味道的标志。考虑在枚举上有一个enum的工作人员类型和一个大小写开关。Staff类可以有一个abstract方法来强制任何实现返回其类型。更好的解决方案是访问者模式。 -
谢谢,我已经读过几遍关于 instanceof 的滥用以及它是一种糟糕的代码气味的事实,因此将在未来的项目中避免并按照您的建议进行重构。
标签: java iterator iteration treemap