繁体   English   中英

Java迭代器分配问题

[英]Iterator assignment issue Java

因此,我的作业要求我在一个类中实现一个接口。 该接口是一个通用的Iterator,我将不得不重写hasNext()和next()方法。 尝试将实例ArrayList迭代器分配给实例迭代器时出现错误。

这是我的界面:

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 有人可以帮我解决这个问题吗?

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

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

我从异常中了解到的是,您已经将自己的接口定义为Iterator,因此现在与List不再有任何关系。 所以你不能投。

java.util.List.iterator方法返回的实例java.util.Iterator ,而不是你的my.special.Iterator接口。 但是,您已将该变量声明为my.special.Iterator接口。 尽管它们具有相同的简单名称,但实际上它们是不同的类型,Eclipse希望您强制转换它,因为它们不相关,所以您不能进行转换。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM