Я заметил нечто забавное, что делает Java (или, по крайней мере, Netbeans), когда я использую классы, реализующие ArrayList
и изменяющие тип элементов. Я в основном создал абстрактный класс, который расширяет ArrayList
и некоторые подклассы, которые должны работать с String
объектами (что-то вроде ArrayList<String>
). Одна из вещей, которые я сделал, чтобы попытаться достичь этого, заключалась в следующем:
public abstract class A extends ArrayList {
...
}
@Override
public abstract class B extends A {
public Iterator<String> iterator() {
return super.iterator();
}
}
Еще один был такой:
public abstract class A extends ArrayList {
...
}
public abstract class B<String> extends A {
@Override
public Iterator<String> iterator() {
return super.iterator();
}
}
Первый успешно переопределяет метод iterator()
, присваивающий ему строковое значение. Другой каким-то образом отменяет приведение типов. Самое смешное, что ни один из них не работает, когда дело доходит до петель. Это получает тип Object
вместо String
.
for (String s : B) {
...
}
У вас есть идея, почему это происходит и как я могу это исправить, не реализовав свой собственный итератор?