Лучшие практики для методов получения и установки для свойств коллекции и свойств объекта в классе Java - PullRequest
0 голосов
/ 17 мая 2018

У меня есть следующая реализация

public class PartGroup {

   private Part iPart;

   private ArrayList<Part> iParttList;

   public Part getPart() {
      return iPart;
   }

   public void setPart( Part aPart ) {
      iPart = aPart;
   }


   public ArrayList<Part> getParttList() {
      return iParttList;
   }


   public void setParttList( ArrayList<Part> aParttList ) {
      iParttList = aParttList;
   }

}

Можно ли устанавливать сеттеры для iParttList и iPart? я думаю, что безопасно иметь геттер только тогда, когда потребитель может использовать геттер, чтобы получить созданный экземпляр коллекции и очистить или добавить элементы в коллекцию Должен ли я удалить сеттер и добавить следующую реализацию

public ArrayList<Part> getParttList() {
      if(iParttList == null)
         iParttList = new ArrayList<Part>();

      return iParttList;
   } 

public Part getPart() {
       if(iPart == null)
          iPart = new Part();

       return iPart;
   }

Какая лучшая практика?

Ответы [ 4 ]

0 голосов
/ 30 марта 2019

Вторая реализация кажется лучше с моей точки зрения. Это гарантирует, что списки не являются нулевыми ни при каких обстоятельствах. Это также помогает уменьшить дубликат кода, который проверяет, является ли список пустым или нет. Наконец, вызов public void setParttList( ArrayList<Part> aParttList ) может быть рискованным, поскольку он может установить новый список, даже если он уже существует.

0 голосов
/ 17 мая 2018

Вторая реализация защищает от возврата null, верно?Таким образом, если есть вероятность, что этот объект может вернуть значение null (потому что конструкторы позволяют это или иным образом это может произойти), и это будет плохо для вашего предполагаемого варианта использования, тогда используйте вторую реализацию.

0 голосов
/ 17 мая 2018

Как мы видим, у вас нет конструкции для создания списка после создания экземпляра PartGroup.

Я думаю:

  1. Если у вас есть конструкция для создания списка объектов Part, и если вы хотите ограничить потребителя изменять или создавать список с помощью установщика, то я думаю, что лучше не иметь установщик

  2. Но, если у вас нет конструктора для создания списка объектов Part, тогда setter - единственный способ создать список объектов Part.

0 голосов
/ 17 мая 2018

Ваша оригинальная реализация выглядит как стандартная реализация для методов получения и установки. Как вы думаете, почему вам нужно переставить его во второй блок кода?

...