У меня есть следующий интерфейс:Iterable и итераторы - ошибка компиляции
public interface DataSet<T> extends Iterable<T> {
public int nExamples();
public T getExample(int index);
public Iterator<T> iterator();
}
Тогда класс, реализующий этот интерфейс:
public class StringTupleDataset implements DataSet<StringTuple> {
Vector<StringTuple> examples;
public StringTupleDataset(Vector<StringTuple> examples) {
if(examples == null)
throw new IllegalArgumentException("null parameter: examples");
this.examples = examples;
} // constructor
@Override
public int nExamples() {
return examples.size();
} // nExamples
@Override
public StringTuple getExample(int index) {
return examples.get(index);
} // getExample
@Override
public Iterator<StringTuple> iterator() {
return examples.iterator();
} // getAllExamples
} // class
StringTupleDataset
Класс компилируется без проблем.
Однако, когда я пытаюсь написать этот кусок кода в другом классе:
public abstract class AbstractOntologyFiller<T> {
private AbstractOntologyFiller() {}
public static <T> void fill(OntologyManager ontoManager, DataSet<T> dataset) {
for(T e : dataset.iterator()) {
// do something
} // for
} // fill
} // class
У меня есть ошибки компиляции, говоря:
Can only interate over an array or an instance of java.lang.Iterable
ли кто-нибудь может мне помочь?