我有這個接口:當我使用forech時,爲什麼會出現StackOverflowError?
public interface ExpIterator extends Iterator {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();
}
}
,你可以看到實驗類實現了Iterable inteface這樣我就可以使用的foreach。
,但是當我嘗試實驗對象使用的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();' - 你怎麼想的? –
當然,在這裏問你這樣的問題之前,你已經在這裏足夠長的時間知道你應該進行調試了。 –
在這個筆記上,它似乎是一系列低效努力中的最新成果,這些問題都被低估。我的理解是,如果持續時間更長,這最終會導致被阻止。 –