-1
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

4 回答 4

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());
            }
        }  
    }
}
于 2012-12-30T14:02:43.890 回答
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());
        }
    }
}
于 2012-12-30T13:32:05.043 回答
0

你需要这样做

    while(it.hasNext()){
        Object obj = it.next() ;
        if( obj instanceof Muz ) {
          Muz muz = (Muz) obj ;
          muz.fiyat();
        }
    } 
于 2012-12-30T13:32:17.063 回答
0

您的 CodeCompletion 没有出现,因为.next()返回 an objectand not IMeyveler。您要么必须强制转换,要么以不同的方式迭代。

    System.out.println(((IMeyveler)it.next()).fiyat());
于 2012-12-30T13:32:39.290 回答