所以我的作业要求我在我的一个班级中实现一个接口。接口是一个通用的迭代器,我必须覆盖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
。有人能帮我解决这个问题吗?
答案 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
班试图做的事情。尝试在类中使用数组而不是列表。