使用Java For Each循环迭代具有私有访问权限的ArrayList?
我有三门课:拉布拉多犬、犬舍和表演。狗舍里有一个私人的 拉布拉多犬。如图所示: Labradors.java:使用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;
公共级拉布拉多犬{
私有字符串名称;
私有字符串描述;
公共拉布拉多犬(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());
}
}
}