0

私は次のインターフェースを持っています:

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

私を助けてくれる人はいますか?

4

3 に答える 3

4

を反復することはできませんが、を反復IteratorすることはできますIterable

for(T e : dataset)

Datasetextends Iterable、 whiledataset.iteratorが を与えるので、で十分ですIterator

于 2013-05-15T14:38:06.533 に答える
1

dataset代わりに反復する必要がありますdataset.iterator()

説明:forループは Iterable を予期しています。Iterable はイテレータではありませんiterator()。メソッドを持つオブジェクトです。

于 2013-05-15T14:38:09.957 に答える
0

OK、エラーが発生しました。

私は書くべきだった:

public static <T> void fill(OntologyManager ontoManager, DataSet<T> dataset) {
    for(T e : dataset) { // (without .iterator() 
于 2013-05-15T14:39:00.367 に答える