【发布时间】:2017-11-25 17:35:56
【问题描述】:
我正在为 Java 中的列表集合做某种“装饰器”。某事是错误的,我不知道它是什么。这是我的代码和观察到的错误。
1. myListContainer.java
public class myListContainer<T> implements List<T>{
List<T> basicList;
public myListContainer(List<T> basicList) {
this.basicList = basicList;
}
@Override
public Iterator<T> iterator() {
return new myIterator();
}
private class myIterator implements Iterator<T>{
int actIndex;
int visitTwice;
public myIterator() {
this.actIndex = 0;
this.visitTwice = 0;
}
@Override
public boolean hasNext() {
if (actIndex < basicList.size() - 1)
return true;
else if (actIndex == basicList.size() - 1 &&visitTwice < 1)
return true;
return false;
}
@Override
public T next() {
if (this.hasNext()) {
if (visitTwice < 1) {
visitTwice = 1;
return basicList.get(actIndex);
} else {
visitTwice = 0;
return basicList.get(actIndex++);
}
}
throw new ArrayIndexOutOfBoundsException();
}
}
//implementation of methods form List<T> interface
}
2. Client.java (psvm) 还有一个问题
public class Client {
List<String> test = new myListContainer<>(Arrays.asList("Janek",
"Bartek", "Stefan", "Horacy", "Jakub", "Antoni"));
boolean bl = test.iterator().hasNext(); //ok,
Iterator iter = test.iterator();
iter.hasNext(); //not ok, cannot resolve hasNext
}
问题:
1. test.iterator().hasNext() 工作正常
2. iter.hasNext() 不起作用,它不可见(hasNext),'无法解析符号'
编辑:当然所有文件都在一个模块中,并且有必要的导入。
【问题讨论】:
-
不要调用你的迭代器
Iterator...那只是自找麻烦。将其命名为其他名称,例如MyIterator<T>,在您声明(错误命名的)myIterator的地方,将其命名为MyIteratorImpl。一旦解决了名称冲突,您就可以开始解决代码中的其他问题。 -
谢谢,是的,名字冲突太可怕了。但是,问题仍然存在。
-
如果您需要帮助,请将您问题中的所有代码更新为当前状态,并解决名称冲突。否则你会浪费人们的时间。
-
好的,我删除了接口 MyIterator,在这种情况下它是不必要的,现在应该更干净了
标签: java list collections iterator iterable