Java枚举列表迭代器问题

时间:2012-12-30 13:26:07

标签: java enums iterator

package example;

import java.util.ArrayList;
import java.util.Iterator;

public class anaBolum {
    public static void main(String[] args) {
        ArrayList<IMeyveler> list = new ArrayList<>();
        list.add(new Muz());
        list.add(new Elma());

        Iterator it = list.iterator();
        while(it.hasNext()){
            it.next().fiyat() //compile error
        }
    }
}

我使用list.iterator()来访问列表元素。但我无法在迭代器中访问此方法fiyat(),因为我收到编译错误。

4 个答案:

答案 0 :(得分:0)

我假设你得到一些编译时错误。如果是这样您需要将迭代器声明更改为Iterator<IMeyveler> it = list.iterator();

其他方面,迭代器不会知道它处理的对象的类型。

public class anaBolum {
    public static void main(String[] args) {
        IMeyveler muz = new Muz();
        muz.fiyat();// Work

        ArrayList<IMeyveler> list = new ArrayList<>();
        list.add(new Muz());
        list.add(new Elma());

        Iterator<IMeyveler> it = list.iterator();
        while(it.hasNext()){
            System.out.println(it.next().fiyat());
        }
    }
}

答案 1 :(得分:0)

你需要这样做

    while(it.hasNext()){
        Object obj = it.next() ;
        if( obj instanceof Muz ) {
          Muz muz = (Muz) obj ;
          muz.fiyat();
        }
    } 

答案 2 :(得分:0)

您的CodeCompletion未显示,因为.next()会返回object而非IMeyveler。您将需要进行强制转换或以不同方式进行迭代。

    System.out.println(((IMeyveler)it.next()).fiyat());

答案 3 :(得分:0)

试试这个:

package javaaa;

import java.util.ArrayList;
import java.util.Iterator;

public class anaBolum {
    public static void main(String[] args) {
        IMeyveler muz = new Muz();
        muz.fiyat();// Work

        ArrayList<IMeyveler> list = new ArrayList<>();
        list.add(new Muz());
        list.add(new Elma());

        for(IMeyveler fruit : list)
        {
            if(fruit instanceof Muz)
            {
                System.out.println(fruit.fiyat());
            }
        }  
    }
}