«Обнулять» или не «обнулять» атрибуты моего класса - PullRequest
6 голосов
/ 16 мая 2010

Когда я пишу класс на Java, мне нравится инициализировать атрибуты, для которых прямо установлено значение по умолчанию, и атрибуты, которые устанавливаются вызывающей стороной в конструкторе, что-то вроде этого:

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

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

    // remainder omitted
}

Теперь предположим, что у меня есть класс Tree:

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

    // no constructor needed, remainder omitted
}

Должен ли я установить для корневого атрибута значение null, чтобы отметить, что он по умолчанию имеет значение null, или опустить нулевое значение?

EDIT:

Я пришел к этой идее после прочтения источников LinkedList и ArrayList , которые оба четко устанавливают свои атрибуты (размер в LinkedList и firstIndex / lastIndex в ArrayList) равными 0.

Ответы [ 3 ]

11 голосов
/ 16 мая 2010

Нет необходимости для явной инициализации атрибута с типом ссылки на null. По умолчанию он будет инициализирован нулем. Аналогичным образом, существуют стандартные правила инициализации для примитивных типов:

  • логические атрибуты инициализируются false и
  • целочисленные (включая char), float и double атрибуты все обнуляются.

Так что инициализация size в этом примере также строго не нужна.

Поэтому вопрос стиля заключается в том, делаете ли вы их или не инициализируете. Мое личное мнение таково, что это не улучшает читабельность, а потому является пустой тратой времени. (Я не пишу свой код для тех, кто не понимает основ Java ...)

4 голосов
/ 16 мая 2010

Поскольку вы полагаетесь на эти переменные, имеющие значение по умолчанию (0, null) для нового экземпляра, я бы инициализировал их, чтобы проиллюстрировать читателю, что это так. В противном случае им, возможно, придется читать дальше, чтобы знать, что нет конструктора, в котором переменные инициализируются (возможно, в другое значение).

Изменить: Конечно, вы не обязаны инициализировать; Я предполагаю, что вопрос касается предпочтительного стиля, и это мое предпочтение.

3 голосов
/ 16 мая 2010

Это личное предпочтение, но ИМХО, лучше его опустить. Ссылки по умолчанию инициализируются с нуля, поэтому вы только загромождаете код. Чем меньше кода, тем лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...