首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 7:类作为参数

Java 7:类作为参数
EN

Stack Overflow用户
提问于 2015-04-14 14:20:44
回答 1查看 3.6K关注 0票数 0

我有一个名为"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",所以我尝试使用迭代器,但仍然无法解决问题。我做错了什么?谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-04-14 14:31:54

要使用for-每个Java,您需要使用java.lang.Iterable,正如错误消息所述。这意味着要迭代的类需要实现这个接口。你有两种方法可以解决这个问题。

第一个解决方案:直接访问内部列表。

代码语言:javascript
复制
public class Pencilcase {
    public ArrayList<Pencil> list;
}

然后像这样迭代:

代码语言:javascript
复制
public int qwerty(Pencilcase p) {
   for (Pencil pen : p.list) {
       ....
   }
}

现在,这个解决方案使用了一个公共类变量。这是件坏事。而且看起来也不太花哨。所以我们有一个

第二个解决方案:实现Iterable

为此,您需要修改Pencilcase类以实现Iterable

代码语言:javascript
复制
public class Pencilcase implements java.lang.Iterable<Pencil> {
    private ArrayList<Pencil> list;

    @Override
    public Iterator<Pencil> iterator() {
        return list.iterator();
    }
}

使用这个类,您可以直接迭代Pencilcase实例。

这是因为for-loop基本上用iterator函数获取迭代器,并使用它来获取列表中的所有条目。

因此,您的循环可以如下所示:

代码语言:javascript
复制
public int qwerty(Pencilcase p) {
   for (Pencil pen : p) {
       ....
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29629851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档