可迭代和迭代器实现问题 (JAVA)

Iterable & Iterator Implementation Issue (JAVA)

我是 Java 的新手,我正在尝试了解 Iterable 和 Iterator 的实现。

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();
        }
    }
}

我的问题是:当我完成实现并尝试将 for-each 应用于 "iterable" 对象时,编译器说类型不匹配。

这是 apply for-each 的 main() 执行:

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);
    }
}

谁能指出我的问题?

谢谢!!!

由于您的 class 将遍历字符串,您应该指定模板类型:

public class ClassMates implements Iterable<String>