我有以下的集合:的Java迭代一個TreeMap - 不兼容的類型
private Map <String, Staff> staff;
實現爲一個TreeMap:
staff = new TreeMap <String, 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職員類型和一個case開關。 'Staff'類可以有一個'abstract'方法,強制任何實現返回它的類型。更好的解決方案是訪客模式。 –
謝謝,我已經閱讀了幾次有關濫用instanceof和它是一種不好的代碼氣味的事實,所以我們將在未來的項目中進行重構,並按照您的建議進行重構。 – gazrolo4