Сохранение экземпляра класса Java в теле экземпляра - PullRequest
0 голосов
/ 27 июня 2018

Просматривая статьи о оракуле и Java на эту тему, я не нашел ничего «неправильного» или, возможно, «проблемного» в этой структуре.

Я имею в виду класс, который действует как экземпляр хранилища данных, а также сохраняет себя в том же классе через статические методы получения / установки и итераторы.

как показано ниже: (Сравните пример 1 ниже с примером 2 ниже того - что «лучше / безопаснее»)?

Пример 1:

public class Person {

    /**
     * The data stored.
     */
    private Integer age;
    private Object data;
    private String name;

    /**
     * The data handled (IN THE SAME CLASS)
     */
    private static List<Person> persons = new ArrayList<>();

    public static void addPerson(Person p){
        persons.add(p);
    }

    public static Person getPerson(int index){
        return persons.get(index);
    }
}

Versus: Пример 2: (разделить на 2 класса)

public class Person {

    /**
     * The data stored.
     */
    private Integer age;
    private Object data;
    private String name;
}

public class PersonDataHandler {

    /**
     * The data handled (NOT THE SAME CLASS)
     */
    private static List<Person> persons = new ArrayList<>();

    public static void addPerson(Person p){
        persons.add(p);
    }

    public static Person getPerson(int index){
        return persons.get(index);
    }
}

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Нет никакого смысла создавать другой класс для члена static, если вы не рассматриваете PersonDataHandler как класс Util, который также будет использоваться другими классами.

Кроме того, если ваш статический член public, то не имеет значения, находится ли он в классе Person или где-либо еще.

0 голосов
/ 27 июня 2018

Второй вариант лучше, по крайней мере, с точки зрения инкапсуляции. Было бы лучше удалить «статический» модификатор, чтобы этот класс не был глобальным.

Первый вариант очень странный, потому что вы можете сделать это:

personA.addPerson(personB);

Что нарушает принцип единой ответственности. (DAO и POJO одновременно) Это также приводит к странной структуре наследования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...