Использование Java For-Each L oop для перебора ArrayList, который имеет частный доступ? - PullRequest
0 голосов
/ 18 марта 2020

У меня есть три класса: Лабрадоры, Питомники и Шоу. Питомник содержит частный ArrayList Лабрадоров. Как показано:

Лабрадоры. java:

public class Labradors {
    private String name;
    private String description;

    public Labradors(String n, String d) {
        name = n;
        description = d;
    }

    public String getName() {
        return name;
    }
}

Питомник. 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);
    }

}

и

Показать. java

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.labs ) {
            System.out.println(lab.getName());
        }
    }
}

Мой для каждого l oop в Show дает мне следующую ошибку:

Show.java:12: error: labs has private access in Kennel
                for (Labradors lab: niceHome.labs ) {
                                            ^
1 error

Ясно, что одним из решений было бы сделать ArrayList опубликованным c, но Мое понимание инкапсуляции заключается в том, что наилучшая практика означает, что она должна быть частной и написана на геттере. Но как мне это сделать?

Я чувствую, что ответ должен быть действительно простым, но мне трудно отследить его ...

NB - я использую openjdk версии 11.0 .6 в Ubuntu 19.10.

1 Ответ

1 голос
/ 18 марта 2020

Внутри Кеннел-класса создайте функцию-получатель

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());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...