我有一个名为"Pencilcase“的类,其中唯一的实例变量是ArrayList<Pencil>。
我有这样的方法:
public int qwerty(Pencilcase p)
我试过这样做:for (Pencil pen : p)
但是我得到了一个错误,上面写着“for-每一个不适用于表达式类型。Required: java.lang.Iterable或java.lang.Iterable;found”。
因为上面写着"Required: java.lang.iterable",所以我尝试使用迭代器,但仍然无法解决问题。我做错了什么?谢谢
发布于 2015-04-14 14:31:54
要使用for-每个Java,您需要使用java.lang.Iterable,正如错误消息所述。这意味着要迭代的类需要实现这个接口。你有两种方法可以解决这个问题。
第一个解决方案:直接访问内部列表。
public class Pencilcase {
public ArrayList<Pencil> list;
}然后像这样迭代:
public int qwerty(Pencilcase p) {
for (Pencil pen : p.list) {
....
}
}现在,这个解决方案使用了一个公共类变量。这是件坏事。而且看起来也不太花哨。所以我们有一个
第二个解决方案:实现Iterable
为此,您需要修改Pencilcase类以实现Iterable。
public class Pencilcase implements java.lang.Iterable<Pencil> {
private ArrayList<Pencil> list;
@Override
public Iterator<Pencil> iterator() {
return list.iterator();
}
}使用这个类,您可以直接迭代Pencilcase实例。
这是因为for-loop基本上用iterator函数获取迭代器,并使用它来获取列表中的所有条目。
因此,您的循环可以如下所示:
public int qwerty(Pencilcase p) {
for (Pencil pen : p) {
....
}
}https://stackoverflow.com/questions/29629851
复制相似问题