Я использую стороннюю библиотеку, которая возвращает необработанный итератор, например
Iterator<?> children = element.getChildElements();
Я знаю фактический тип, но не знаю Не обязательно доверять сторонней библиотеке, чтобы она использовалась в будущем. Есть два (которые я могу придумать) несколько рискованных способов обойти это:
@SuppressWarnings("unchecked")
Iterator<ActualObject> currentChildren = (Iterator<ActualObject>)currentElement.getChildElements();
или
Iterator<?> children = element.getChildElements();
while (null != children && children.hasNext()) {
ActualObject child = (ActualObject)children.next(); //Possible ClassCastException @ runtime
...
}
Единственный «безопасный» способ, который я мог придумать для обхода такого итератора, - это следующий :
Iterator<?> children = element.getChildElements();
while (null != children && children.hasNext()) {
Object obj = children.next();
ActualObject child = null;
if (obj instanceof ActualObject)
child = (ActualObject)obj;
...
}
Это кажется слишком многословным. Есть ли лучший, но столь же «безопасный» способ обхода необработанного итератора?
РЕДАКТИРОВАТЬ: Я понимаю, что могу перехватить / зарегистрировать исключение в блоке else, Я искал (надеялся) на язык Java, эквивалентный тому, что ColinD упомянул ниже.