2013-06-07 2 views
0

Я хотел создать Iterator для универсального класса, который работал нормально. Я думал, что итератор попытается выполнить итерацию с использованием TypeParameter универсального класса, но, видимо, это не так, потому что Eclipse сообщает мне, что объект ожидается.Ява: несоответствие типов с итератором класса generic

Если кто-то знает, что я сделал неправильно, я был бы очень счастлив.

public class GenericClass<T extends OtherClass> implements Comparable, Iterable 
{ 
    private ArrayList<T> list = new ArrayList<T>(); 
    [...] 
    @Override 
    public Iterator<T> iterator() 
    { 
    Iterator<T> iter = list .iterator(); 
    return iter; 
} 
    [...] 
} 



public class Main 
{ 
public static void main(String[] args) 
{ 
    GenericClass<InstanceOfOtherClass> gen = new GenericClass<InstanceOfOtherClass>("Aius"); 

    for(InstanceOfOtherClass listElement : gen) // This is the problem line; gen is underlined and listElement is expected to be an Object 
    { 
     System.out.println(listElement.getName()); 
    } 

} 

} 
+1

Прочтите предупреждения компилятора – SLaks

ответ

8
implements Comparable, Iterable 

Вы должны указать общие параметры ваших базовых интерфейсов.
В противном случае вы будете использовать Iterable не в общих чертах, и параметр типа станет Object.

+0

Удивительно, что было быстро - спасибо большое! =) – user2464284

+0

«В противном случае вы будете внедрять Iterable ». Нет, они не будут. Они будут внедрять «Итерируемый» (и «Сравнительный»). 'Iterable' - это не то же самое, что' Iterable ' – newacct

+0

@newacct: Уточненный. – SLaks

0

Если вы хотите, чтобы ваш класс родовое как GenericClass<T extends OtherClass>, то вы должны быть реализации Comparable<T> и Iterable<T>, в T в обоих случаях одно и то же T объявлен GenericClass.

Таким образом, когда вы делаете общий тип экземпляра следующим образом -

GenericClass<InstanceOfOtherClass> //... 

Эффект будет то, что он реализует Comparable<InstanceOfOtherClass> и Iterable<InstanceOfOtherClass>, что делает матч подписи метода.

Смежные вопросы