Java 7:Class作为参数

时间:2015-04-14 14:20:45

标签: java class arguments

我有一个名为&#34; Pencilcase&#34;的类,其中唯一的实例变量是ArrayList<Pencil>

我有一个像这样的方法:

public int qwerty(Pencilcase p)

我尝试过这样的事情:for (Pencil pen : p)

但是我收到一个错误,其中表示&#34; for-each不适用于表达式类型。必需:array或java.lang.Iterable;找到了Pencilcase&#34;。

因为它说&#34;必需:java.lang.iterable&#34;,我试图使用迭代器,但仍然无法解决问题。我究竟做错了什么?谢谢

1 个答案:

答案 0 :(得分:0)

要使用for-each 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 - 循环基本上使用iterator函数获取迭代器,并使用它来获取列表中的所有条目。

因此,你的循环可能如下所示:

public int qwerty(Pencilcase p) {
   for (Pencil pen : p) {
       ....
   }
}