2013-05-15 5 views
0

컴파일 나는 다음과 같은 인터페이스를 가지고 : 의 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는 문제없이 컴파일합니다. 나는 시도하고 다른 클래스에이 코드 조각을 쓸 때

그러나 : 나를 도울 수있는 사람이

Can only interate over an array or an instance of java.lang.Iterable 

있습니까 :

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 

을 나는 컴파일 오류 말하는가?

답변

4

Iterator을 반복 할 수 없지만 Iterable을 통해 반복 할 수 있습니다. DatasetIterable을 상속하기 위해 (때문에) dataset.iterator 당신에게 Iterator를 제공하는 동안

for(T e : dataset) 

는 충분합니다.

1

당신은 dataset 대신 dataset.iterator()

설명을 반복 할 필요가 다음 for 루프가의 Iterable을 기대하고있다. Iterable은 반복자가 아닙니다. 즉, iterator() 메소드가있는 객체입니다.

0

오류가 발생했습니다.

내가 쓴해야

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