首先,为了让您理解这个问题,我将简要解释一下我的项目:
我有一个名为Pair
的类,它基本上创建了类型
Pair<String,Double>
并且有getFirst()
和getSecond()
方法分别返回String
和Double
值。
然后我有另一个名为Package
的类,它基本上包含Pairs
列表,并实现Iterable
接口,因此我可以通过列表进行迭代:
Package<Pair<String,Double>> package;
List <Pair<String,Double>> list;
我想要的是使用sum
doubles
Pair
iterator()
上Package
。
迭代器的定义如下public Iterator<E> iterator() {
return this.iterator();
}
类:
Exception in thread "main" java.lang.StackOverflowError
at Package.iterator(Package.java:98)
我尝试了两种不同的方法,在两种情况下都产生了:
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;
}
这是第一个:
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;
}
第二个:
{{1}}
我的问题是: 为了得到这个错误,我做错了什么?
答案 0 :(得分:5)
StackOverflowError
的直接原因是您正在调用该方法:
public Iterator<E> iterator() {
return this.iterator();
}
您需要在此处调用其他方法,例如return list.iterator()
或package.iterator()
(package
不是Java中的有效标识符,因为它是关键字)。
答案 1 :(得分:2)
你的第一次尝试是有缺陷的,因为你每次打电话package.iterator()
时都要求一个新的迭代器 - 我想你知道这个,因为你写了第二个。
第二个错误更加微妙 - 您需要使用package.iterator()
而不是Package.iterator()
。第二个不应该工作。
Andy Turner说的是什么。