首先,为了让您理解这个问题,我将简要解释一下我的项目:
我有一个名为的类Pair,它基本上创建了类型
Pair<String,Double>
Run Code Online (Sandbox Code Playgroud)
并且有一个getFirst()和分别getSecond()返回String和Double值的方法.
然后我有另一个名为的类,Package它基本上包含一个列表Pairs,并实现了Iterable接口,因此我可以通过列表进行迭代:
Package<Pair<String,Double>> package;
List <Pair<String,Double>> list;
Run Code Online (Sandbox Code Playgroud)
我要的是sum在doubles每个Pair使用iterator().
迭代器的定义如下Package:
public Iterator<E> iterator() {
return this.iterator();
}
Run Code Online (Sandbox Code Playgroud)
我尝试了两种不同的方法,在两种情况下都产生了:
Exception in thread "main" java.lang.StackOverflowError
at Package.iterator(Package.java:98)
Run Code Online (Sandbox Code Playgroud)
这是第一个:
public static double packageWeight(Package<Pair<String, Double>> package) {
double sum = 0;
Pair<String, Double> pair;
while (package.iterator().hasNext()) {
pair = package.iterator().next();
sum = sum + pair.getSecond();
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
第二个:
public static double packageWeight(Package<Pair<String, Double>> package) {
double sum = 0;
Pair<String, Double> pair;
Iterator<Pair<String,Double>> it = Package.iterator();
while (it.hasNext()) {
pair = it.next();
sum = sum + pair.getSecond();
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:为了得到这个错误我做错了什么?
直接原因StackOverflowError是您正在调用该方法:
public Iterator<E> iterator() {
return this.iterator();
}
Run Code Online (Sandbox Code Playgroud)
你需要在这里调用一个不同的方法,例如return list.iterator()或package.iterator()(除了它package不是Java中的有效标识符,因为它是一个关键字).