使用Java For Each循环迭代具有私有访问权限的ArrayList?

使用Java For Each循环迭代具有私有访问权限的ArrayList?,java,class,foreach,Java,Class,Foreach,我有三门课:拉布拉多犬、犬舍和表演。狗舍里有一个私人的 拉布拉多犬。如图所示: Labradors.java: 公共级拉布拉多犬{ 私有字符串名称; 私有字符串描述; 公共拉布拉多犬(n串,d串){ name=n; 描述=d; } 公共字符串getName(){ 返回名称; } } Kennel.java: import java.util.ArrayList; public class Kennel{ private ArrayList<Labradors> labs;

我有三门课:拉布拉多犬、犬舍和表演。狗舍里有一个私人的 拉布拉多犬。如图所示:

Labradors.java:

公共级拉布拉多犬{
私有字符串名称;
私有字符串描述;
公共拉布拉多犬(n串,d串){
name=n;
描述=d;
}
公共字符串getName(){
返回名称;
}
}
Kennel.java:

import java.util.ArrayList;

public class Kennel{
    private ArrayList<Labradors> labs;

    public Kennel() {
        labs = new ArrayList<Labradors>();
    }

    public void addDog(Labradors l) {
        labs.add(l);
    }

}
在Show中,我的for each循环给出以下错误:

Show.java:12:错误:实验室在犬舍中有私人访问权限
用于(拉布拉多实验室:niceHome.labs){
^
1错误
显然,一个解决方案是公开ArrayList,但我对封装的理解是,最佳实践意味着它应该是私有的,并且是一个Getter编写的。但是我如何做到这一点呢

我觉得这应该有一个非常简单的答案,但我很难找到它


注意-我在Ubuntu 19.10上使用openjdk 11.0.6版。

在Kennel类中创建一个getter函数

import java.util.ArrayList;
public class Kennel{
    private ArrayList<Labradors> labs;

    public Kennel() {
        labs = new ArrayList<Labradors>();
    }

    public void addDog(Labradors l) {
        labs.add(l);
    }

    public ArrayList<Labradors> getLabs(){
        return this.labs;
    }
}

您需要为您的Kennel对象创建一个输出方法。Private意味着只有该类才能看到它。您的另一个选择是创建一个getter(getLabs()),该getter只返回到list.create getter
public ArrayList getLabradors(){return this.labs;}
谢谢你。我在谷歌上搜索了这么多,结果我完全搞糊涂了,以为是这样的。相反,你要做的事情要复杂得多。这导致了一个全新的搜索漏洞。不过,我很高兴出错,因为这是我所希望的简单解决方案。
import java.util.ArrayList;
public class Kennel{
    private ArrayList<Labradors> labs;

    public Kennel() {
        labs = new ArrayList<Labradors>();
    }

    public void addDog(Labradors l) {
        labs.add(l);
    }

    public ArrayList<Labradors> getLabs(){
        return this.labs;
    }
}
class Show
{
    public static void main(String args[])
    {
        Labradors Dave = new Labradors("Dave", "Good dog!");
        Labradors Bob = new Labradors("Bob", "Likes tummy rubs!");
        Kennel niceHome = new Kennel();
        niceHome.addDog(Dave);
        niceHome.addDog(Bob);


        for (Labradors lab: niceHome.getLabs()) {
            System.out.println(lab.getName());
        }
    }
}