У меня есть следующие коллекции: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 'является признаком запаха кода. Подумайте о наличии «перечисления» типов сотрудников и переключателя case в перечислении. Класс 'Staff' может иметь метод« abstract », который заставляет любую реализацию возвращать свой тип. Еще лучшим решением будет шаблон посетителя. –
Спасибо, я уже несколько раз читал о злоупотреблении instanceof и о том, что это плохой запах кода, поэтому он будет стремиться избегать в будущих проектах и рефакторе, как вы предлагаете. – gazrolo4