[英]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.