针对java类

时间:2018-05-17 11:51:30

标签: java properties getter-setter

我有以下实施

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的设置器? 我认为拥有一个getter是安全的,然后消费者可以使用getter来获取创建的集合实例并清除或添加元素到集合 我应该删除setter并添加以下实现

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 :(得分:2)

第二个实现防止返回null,对吧?因此,如果有可能这个对象可以返回null(因为那些构造函数允许这样或者它可能会通过)并且这对于您的预期用例来说是一件坏事,那么使用第二个实现。

答案 1 :(得分:0)

您的原始实现似乎是getter和setter的标准实现。为什么你认为你需要将它重新排列到第二个代码块?

答案 2 :(得分:0)

正如我们所看到的,在创建PartGroup实例后,您没有构造来创建列表。

我想:

  1. 如果你有构建来创建Part对象的列表,并且你想限制使用者通过setter更改或创建列表,那么我认为最好不要使用setter

  2. 但是,如果你没有构造函数来创建Part对象列表,那么setter只是创建Part对象列表的方法。

答案 3 :(得分:0)

从我的角度来看,第二种实现似乎更好。它确保在任何情况下列表都不为空。它还有助于减少检查列表是否为空的重复代码。最后,呼叫public void setParttList( ArrayList<Part> aParttList )可能会有风险,因为即使已经存在一个列表,它也会设置一个新列表。