我正在做一名装饰工作者'用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()DOESN&#39;工作,它不可见(hasNext),&#39;无法解析符号&#39;
编辑:当然所有文件都在一个模块中,并且有必要的导入。
答案 0 :(得分:0)
问题是调用的范围,在这个类的范围内,你应该初始化或声明成员/实例变量。
这是有效的 - boolean bl = test.iterator().hasNext(); //ok,
Iterator iter = test.iterator();
因为它是类成员的声明。
因此,如果您试图在功能范围内调用hasNext()
,它将起作用。见例子:
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();
public void foo() {
while (iter.hasNext()) { // here it will work!
}
}
}
答案 1 :(得分:0)
我很抱歉,不小心删除了我的主要功能,这是一个问题。对不起。
问题可能会被删除,这只是我的简单错误,抱歉。