可迭代和迭代器实现问题 (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>
我是 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>