Пытаемся использовать generics-ify некоторый унаследованный код, я застрял. У меня есть ParentObject, который обертывает ChildObject для предоставления операций типа группы в ChildObject. Наиболее полезно, он позволяет итерации по набору дочерних объектов. Когда я пытаюсь добавить некоторые общие элементы в микс, я не могу понять, как заставить его играть дружелюбно с методом итератора без ошибки «именования» или в приведенном ниже примере «Тип возврата несовместим с ошибкой Iterable.iterator(). Любые предложения? (Bonus вопрос - есть лучший способ, чтобы написать метод избежать thegetChildObjectByIndex(), чтобы избежать типа стирания компиляторов предупреждения, кроме подавления предупреждений?) Спасибо большого заранее за любую помощьПроблема с генераторами Java
public class ParentObject implements Iterable<ChildObject> {
protected List<? super ChildObject> theChildObjects;
@SuppressWarnings("unchecked")
public <T extends ChildObject> T getChildObjectByIndex(int idx) {
return (T)theChildObjects.get(idx);
}
public Iterator<? super ChildObject> iterator() {
return java.util.Collections.unmodifiableCollection(this.theChildObjects).iterator();
}
}
Это те '? супер' и 'T extends' абсолютно необходимы? Если нет, просто удалите их. Else обновите свой вопрос, чтобы уточнить требования к функциональному дизайну в отношении этих потребностей. Только тогда мы можем предложить наилучшие подходящие генераторы. – BalusC
Из вашего описания, я готов поспорить, что 'супер' не означает, что вы думаете, что это значит. –
Вы бы выиграли эту ставку, но не более ... – Chris