I have this interface:
public interface ExpIterator extends Iterator<DNAChain> {
void setLevel(int n);
}
and this class:
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;
}
}
and this class:
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();
}
}
as you can see Experiment class implements Iterable inteface so I can use foreach.
but when I try to use foreach on Experiment object:
Experiment experiment1 = new Experiment(5);
for (Object o :experiment1) {
System.out.println("ddd");
((DNAChain)o).getChain();
}
I get this error:
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)
what is wrong with my code?What I do wrong?