繁体   English   中英

Java集合属性初始化-最佳实践

[英]Java collection property initialisation - best practice

古老的问题,但是这里的最佳实践是什么?

我想到的四个例子是:

//================
public class POJO{
  List<String> list;
}

//================
public class POJO{
  List<String> list = new ArrayList<String>();
}

//================
public class POJO{
  List<String> list;

  public POJO(){
    list = new ArrayList<String>();
  }
}

//================
public class POJO{
  List<String> list;

  public getList(){
      if (list==null)
        list =new ArrayList<String>();
      return list;
  }
}

我之所以问是因为,我有面向客户的POJO,它们会初始化为null和域对象,当它们查询数据库并丢失时,它们将返回空集合(但它们将插入null)。 我想我需要做一个或另一个,但是不能决定哪个。

第二个:

public class POJO {
    List<String> list = new ArrayList<String>();
}

这更多是关于项目中遵循的编码约定,而不是有害生物实践。 只要所有人都以相同的方式进行操作,方法上的差异就很小。

除了#1以外,如果可以接受null,则可能应将字段显式初始化为null。

List<String> list = null;

第三个。

将这些初始化程序放在构造函数中,不会像我自己的问题那样出现奇怪的初始化顺序问题,这里: 为什么我的字段为空,即使应该立即实例化它也是如此? 通常,比起详细的初始化顺序,更好地知道在构造函数开始时对super()的隐藏调用。

第二个,只要您不想检查列表中的每个操作是否为空。 另外,从数据库中获取数据时,请确保将元素保留在列表中或至少保留为空集合,避免使用NPE。

public class POJO { List<String> list = new ArrayList<String>(); }

第三个:

//================
public class POJO{
  List<String> list;

  public POJO(){
    list = new ArrayList<String>();
  }
}

无论如何,通常在构造函数中都有工作。 与#3在一起。 使用#2,您必须查看两个地方。

我对此:

class MyClass {
  // constants first
  public static final int CONSTANT_1 = 48;

  // private static stuff next
  private static final Logger logger = ...;

  // private final stuff
  private final String property;

  // private non-final stuff, with good comments

  // protected stuff, with VERY good comments

  MyClass() {
    // the only place things get initialized
  }
}

第三,因为它是一种惰性的初始化,是一种首选的设计。

仅在构造函数中初始化对象。

public class POJO{
  private List<String> list = null;

  public POJO(){
    this.list = new ArrayList<String>();
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM