迭代器分配问题Java

时间:2013-12-03 05:57:46

标签: java

所以我的作业要求我在我的一个班级中实现一个接口。接口是一个通用的迭代器,我必须覆盖hasNext()和next()方法。当我尝试将实例ArrayList迭代器分配给实例Iterator时,我收到错误。

这是我的界面:

public interface Iterator <E>
{
    boolean hasNext();
    E next();
    void remove();
}// end Iterator interface

这是实现该接口的类:

import java.util.*;
import java.io.*;

public class WordDatabase implements Iterator<String>
{
// Declaration
private List<String> aList;
private Iterator<String> aListIterator;

    /**** Other Class Methods Here *****/

@SuppressWarnings("unchecked")
public void shuffle()
{
    // Declaration
    int rand;
    String temp;

    // Statement
    // shuffling ArrayList
    for(int i = 0; i < getAlist(); i++)
    {
        rand = (int)(Math.random() * getAlist() - 1);

        // swapping two ArrayList entry

        temp = aList.get(i);
        aList.remove(i);
        aList.add(i, aList.get(rand));
        aList.remove(rand);
        aList.add(rand, temp);
    }

    aListIterator = aList.iterator();

    return;
}// end shuffle method

Eclipse告诉我,我需要将aList.iterator()转换为Iterator<String>,但这样做会引发错误java.util.AbstractList$Itr cannot be cast to Iterator。有人能帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:0)

您不能这样做,因为两个Iterator对象都属于不同的包。

您必须像List那样定义自己的Iterator界面;定义一个方法iterator(),它返回接口Iterator的对象。

答案 1 :(得分:0)

我从异常中理解的是您已将自己的界面定义为迭代器,因此现在与List没有任何关系。 所以你不能演员。

答案 2 :(得分:0)

java.util.List.iterator方法返回java.util.Iterator的实例,而不是my.special.Iterator接口。但是您已将变量声明为my.special.Iterator接口。虽然它们具有相同的简单名称,但它们实际上是不同的类型,Eclipse希望您将其强制转换,但由于它们不相关而无法进行转换。

您还必须实现自己的特殊List类,或者避免使用iterator方法。

答案 3 :(得分:0)

Iterator<String> aListIterator是您的迭代器接口,aList.iterator();返回的迭代器是java.util.Iterator。

名称相同但包装不同(我假设)。所以你不能施展它们。但是要使用迭代器实际迭代列表,您需要扩展列表并在其中实现迭代器。这是你WordDatabase班试图做的事情。尝试在类中使用数组而不是列表。