私は次のインターフェースを持っています:
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
私を助けてくれる人はいますか?