7

古老的问题,但这里的最佳做法是什么?

我脑海中浮现的四个例子:

//================
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)时,它们返回空集合。我想我需要做一个或另一个,但不能决定哪一个。

4

7 回答 7

6

第二个:

public class POJO {
    List<String> list = new ArrayList<String>();
}
于 2013-10-25T10:46:35.720 回答
0

这更多是关于项目中遵循的编码约定,而不是害虫实践。只要你们都用同样的方法做,方法上的差别很小。

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

List<String> list = null;
于 2013-10-25T10:54:43.107 回答
0

第三个。

将这些初始化程序放在构造函数中不会为像我自己的奇怪的初始化顺序问题留下任何空间,在这里:为什么我的字段为空,即使它应该立即实例化?构造函数开始时的隐藏调用super()比一般初始化的详细顺序更为人所知。

于 2013-10-25T11:04:28.727 回答
0

第二个,只要您不想检查列表中的每个操作(如果它为空)。此外,当从数据库中获取时,请确保将元素保存在列表或至少一个空集合中,避免 NPE。

public class POJO { List<String> list = new ArrayList<String>(); }
于 2018-04-22T12:37:08.740 回答
-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
  }
}
于 2013-10-25T10:50:51.407 回答
-1

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

于 2013-10-25T10:58:38.930 回答
-1

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

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

  public POJO(){
    this.list = new ArrayList<String>();
  }
}
于 2013-10-25T11:00:32.990 回答