2016-03-02 2 views
0

Я новичок в Java, и я пытаюсь узнать о реализации Iterable & Iterator.Iterable & Iterator Implementation Issue (JAVA)

import java.util.Iterator; 
import java.util.LinkedList; 
import java.util.NoSuchElementException; 

public class ClassMates implements Iterable{ 
    private String className; 
    private LinkedList<String> nameList; 

    public ClassMates(String className){ 
     this.className = className; 
     this.nameList = new LinkedList<String>(); 
    } 

    public void addName(String name){ 
     nameList.add(name); 
    } 

    public LinkedList<String> getNameList() { 
     return nameList; 
    } 

    @Override 
    public Iterator<String> iterator() { 
     return new IteratorClass(); 
    } 

    // Inner Class 
    private class IteratorClass implements Iterator<String>{ 
     private int index; 

     public IteratorClass(){ 
      this.index = 0; 
     } 

     @Override 
     public boolean hasNext() { 
      return index < nameList.size(); 
     } 

     @Override 
     public String next() { 
      if(hasNext()){ 
       int i = index; 
       index++; 
       System.out.println("This is "+ i); 
       return nameList.get(i); 
      } 
      throw new NoSuchElementException(); 
     } 
     @Override 
     public void remove() { 
      throw new UnsupportedOperationException(); 
     } 
    } 
} 

Мой вопрос: когда я завершить реализацию и попытаться применить для каждого-к «Iterable» объекта, компилятор сказал типы не совпадают.

Вот основной() исполнение для применять для каждого-:

public class Main { 

    public static void main(String[] args) { 
    ClassMates classMates = new ClassMates("03-01"); 
    classMates.addName("Classmate 1"); 
    classMates.addName("Classmate 2"); 
    classMates.addName("Classmate 3"); 
    classMates.addName("Classmate 4"); 

    for(String name : classMates){   
    //HERE! the compiler report "String" is not match the return type of "classMates" 
     System.out.println(name); 
    } 
} 

Любой человек может указать мне проблему?

спасибо !!!

ответ

0

Как ваш класс будет перебирать строки, вы должны указать тип шаблона:

public class ClassMates implements Iterable<String> 
+0

Благодарности delephin !!! После того, как я просмотрел API, я заметил , который должен заменить на . Благодарим за помощь! –

+0

Рад помочь, и добро пожаловать в переполнение стека. Если этот ответ или любой другой решают вашу проблему, отметьте его как принятый. – delephin

Смежные вопросы