Мне было интересно, как я могу обрабатывать полиморфизм в цикле for без использования instanceof, как в C #.
Вот что у меня есть:
Абстрактный класс А:
public abstract class A
{
public abstract Map<Long, ? extends A> getNodes();
public abstract void setNodes(Map<Long, ? extends A> n);
}
B и C классы, которые расширяют A и реализуют абстрактные методы A:
public class B
{
private Map<Long, C> childNodesC;
@Override
public Map<Long, ? extends A> getNodes()
{
return childNodesC;
}
@Override
public void setNodes(Map<Long, ? extends A> n)
{
for(C child : n)
childNodesC.put(child.getId(), child);
}
}
Является ли цикл for подобным этому в методе setNodes (), возможно в Java? Я имею в виду, есть ли способ для Java понять, что в моем цикле я хочу перебирать только все объекты C в списке объектов A (которые здесь могут быть объектами B или C).
Или, может быть, я неправильно использую полиморфизм или что-то в этом роде ... или, может быть, это истинный случай использования оператора instanceof:)
(Да, вы правы, мне не нравится оператор "instanceof", это заставляет меня думать, что я не все сделал правильно, поэтому мне нужно исправить их с помощью приведений и instanceof. Это выглядит "грязно", чтобы меня, но, возможно, я ошибаюсь, и это очень распространено!)
Спасибо!