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

时间:2013-10-25 10:43:57

标签: java

年龄问题,但这里的最佳做法是什么?

我头顶的四个例子:

//================
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和在查询数据库并且未命中时返回空集合的域对象(但是它们将插入空值)。我想我需要做其中一个但不能决定哪个。

7 个答案:

答案 0 :(得分:5)

第二个:

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

答案 1 :(得分:0)

这更多是关于项目中遵循的编码约定而非有害生物实践。只要你们所有人都这样做,方法就没有什么区别了。

除了#1之外,如果null是可接受的值,那么可能应该将字段显式初始化为null。

List<String> list = null;

答案 2 :(得分:0)

第三个。

将这些初始化器放在构造函数中就不会出现奇怪的初始化顺序问题,例如我自己的问题,在这里:Why is my field null even though it should be instantiated immediately?在构造函数开头隐藏调用super()比一般初始化的详细顺序。

答案 3 :(得分:0)

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

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

答案 4 :(得分:-1)

第三个:

//================
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
  }
}

答案 5 :(得分:-1)

第3个,因为它是一个优选设计的延迟初始化。

答案 6 :(得分:-1)

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

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

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