【问题标题】:Iterable and Iterators - compile error可迭代和迭代器 - 编译错误
【发布时间】:2013-05-15 14:36:32
【问题描述】:

我有如下界面:

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

有没有人可以帮助我?

【问题讨论】:

    标签: java compiler-errors iterable


    【解决方案1】:

    您无法遍历 Iterator,但可以遍历 Iterable

    for(T e : dataset)
    

    足够了,因为Dataset 扩展了Iterable,而dataset.iterator 为您提供了Iterator

    【讨论】:

      【解决方案2】:

      您只需要迭代 dataset 而不是 dataset.iterator()

      解释:for 循环需要一个 Iterable。 Iterable 不是迭代器:它是具有iterator() 方法的对象。

      【讨论】:

        【解决方案3】:

        好的,收到错误了。

        我应该写:

        public static <T> void fill(OntologyManager ontoManager, DataSet<T> dataset) {
            for(T e : dataset) { // (without .iterator() 
        

        【讨论】:

          猜你喜欢
          • 2014-05-16
          • 2021-08-24
          • 2012-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-14
          • 1970-01-01
          相关资源
          最近更新 更多