我是Java新手,我必须解决这个问题。我有这段代码:
public class StringList {
private String list = "";
public StringList(String... str) {
for (String s : str) list += s+"\t";
}
}
我必须更改类,以便其对象允许使用此指令进行迭代:
for (String s : new StringList("a", "b", "c")) System.out.println(s);
我的想法是创建一个List并对其进行迭代。所以我用这种方式改变了代码:
public class StringList {
private List<String> list = new ArrayList<String>();
public StringList(String... str) {
for (String s: str) list.add(s);
}
}
但是当我尝试使用上面的指令进行迭代时,我得到了这个错误(只能遍历数组或java.lang.Iterable 的实例)并且我花了好几个小时试图修复它但是我一直都在失败。有什么帮助吗?
答案 0 :(得分:0)
您必须像StringList
这样实施Iterable<String>
:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Spliterator;
import java.util.function.Consumer;
public class StringList implements Iterable<String> {
private List<String> list = new ArrayList<String>();
public StringList(String... str) {
for (String s: str) { list.add(s); }
}
@Override
public Iterator<String> iterator() {
return list.iterator();
}
@Override
public void forEach(Consumer<? super String> action) {
list.forEach(action);
}
@Override
public Spliterator<String> spliterator() {
return list.spliterator();
}
}
答案 1 :(得分:0)
要以干净的方式完成,请查看java.lang.Iterable接口:https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html
如果您的StringList类实现它,那么该指令将起作用。我会让你自己完成练习,但你可以从
开始public class StringList implements Iterable<String> {
// the attribute you need to store the strings object
// your constructor
@Override
public Iterator<String> iterator() {
// This is what you need to fill
}
}
PS:使用字符串列表作为属性根本不是一个坏主意,它将为您节省大量的精力和时间,搜索您可以用它做什么