【发布时间】:2017-12-21 06:48:54
【问题描述】:
我有这个界面:
public interface ExpIterator extends Iterator<DNAChain> {
void setLevel(int n);
}
还有这个类:
public class DNAChain {
private String Chain;
private boolean natural;
public String getChain() {
return Chain;
}
public DNAChain (String Chain, boolean natural) {
this.Chain = Chain;
this.natural = natural;
}
}
还有这个类:
public class Experiment implements ExpIterator,Iterable{
private DNAChain[] Chains; // Chains found in the experiment
private int counter; // next chain index
public DNAChain[] getChains() {
return Chains;
}
public void setChains(DNAChain[] chains) {
Chains = chains;
}
public Experiment () {}
public Experiment (int n) {
Chains = new DNAChain[n];
}
@Override
public void setLevel(int n) {
}
@Override
public boolean hasNext() {
return counter < Chains.length;
}
@Override
public DNAChain next() {
return Chains[counter++];
}
@Override
public void remove() {
}
@Override
public Iterator iterator() {
return this.iterator();
}
}
如您所见,Experiment 类实现了 Iterable 接口,因此我可以使用 foreach。
但是当我尝试在 Experiment 对象上使用 foreach 时:
Experiment experiment1 = new Experiment(5);
for (Object o :experiment1) {
System.out.println("ddd");
((DNAChain)o).getChain();
}
我收到此错误:
Exception in thread "main" java.lang.StackOverflowError
at Experiment.iterator(Experiment.java:72)
at Experiment.iterator(Experiment.java:72)
at Experiment.iterator(Experiment.java:72)
我的代码有什么问题?我做错了什么?
【问题讨论】:
-
return this.iterator();- 你认为这是做什么的? -
当然,您在这里已经足够长的时间了,知道在在这里提出这样的问题之前您真的应该进行调试尝试。
-
在那个注释中,这似乎是一系列低效问题中的最新一个,这些问题都被否决了。我的理解是,如果持续时间更长,这最终会导致被 SO 屏蔽。
标签: java