У меня проблема, которая сильно ошеломила меня.Ошибка компиляции Java "for"
У меня есть класс (бар) с помощью метода геттера, который возвращает список:
public abstract class Bar<T extends IdentifiableObject> {
...
public List<Bar> getBars() {
return bars;
}
...
Иерархия у меня есть:
public abstract class Bar<T extends IdentifiableObject>;
public abstract class IdentifiableObject<T extends Comparable<T>>;
Пока здесь все работает нормально, проблема в том, когда Я исполняю:
for(Bar bar : bars.getBars()) {
}
предыдущее предложение вызывает ошибку компиляции:
incompatible types: java.lang.Object cannot be converted to java.util.List<com.x.Bar>
Я был удивлён с этой ошибкой, но я был более удивлен, когда я выступал
List<Bar> bars = bar.getBars();
Iterator<Bar> iterator = bar.getBars().iterator();
и без проблем
Что-то здесь не в «за» предложения?
Спасибо
В основном это происходит потому, что вы используете необработанный тип 'Bar' вместо параметризованной версии. Избегайте сырых типов, таких как чума. –
Вы не сказали, что «бары» находятся в вашем примере «для», но комментарий Джона выше почти наверняка является проблемой. –
Java не любит смешивать исходные типы с дженериками. Попытайтесь использовать тот или иной. Если вам не нужны дженерики (поскольку вы, кажется, не используете 'Bar', а скорее 'Bar'), выведите генерики. –