要"null"或不"null"我的类的属性

hel*_*hod 6 java

当我用Java编写一个类时,我喜欢初始化直接设置为默认值的属性和由构造函数中的调用者设置的属性,如下所示:

public class Stack<E> {
    private List<E> list;
    private int size = 0;

    public Stack(int initialCapacity) {
        list = new ArrayList<E>(initialCapacity);
    }

    // remainder omitted
}
Run Code Online (Sandbox Code Playgroud)

现在假设我有一个Tree类:

public class Tree<E> {
    private Node<E> root = null;

    // no constructor needed, remainder omitted
}
Run Code Online (Sandbox Code Playgroud)

我应该将root属性设置为null,以标记它默认设置为null,还是省略null值?

编辑:

在阅读了LinkedListArrayList的源代码之后我想出了这个想法,它们都明确地将它们的属性(LinkedList中的大小和ArrayList中的firstIndex/lastIndex)设置为0.

Ste*_*n C 11

有没有必要为参考类型的属性明确初始化null.默认情况下,它将初始化为null.同样,基元类型有默认的初始化规则:

  • 布尔属性初始化为false,和
  • 整数(包括char)floatdouble属性都被初始化为零.

因此,size示例中的初始化也是严格不必要的.

因此,无论您是否进行初始化,这都是一种风格问题.我个人认为它不会提高可读性,因此浪费时间.(我不会编写我的代码,由不了解Java基础知识的人维护...)

  • 与"Java的基础知识"无关,与"信令意图"有关.如果我只有一个原始成员声明,​​我发信号(在我的代码中,无论如何)成员在对象创建(构造函数,初始化程序)的其他地方初始化时使用非默认值.如果我在声明中设置成员的值,我发出信号表示不保证在创建对象时在其他地方初始化该成员. (3认同)
  • 说得好:“我编写代码不是为了让不懂 Java 基础知识的人维护”。了解字段被初始化为 null/false/0 确实是 Java 基础知识的一部分。 (2认同)
  • @Arkku - 开发者的"意图"在很大程度上是无关紧要的.重要的是代码实际上做了什么.(如果您必须对开发人员的意图进行逆向工程以修复某些错误,则可能需要重写代码!) (2认同)