2010-05-16 4 views
6

Cuando escribo una clase en Java, me gusta inicializar los atributos que se establecen directamente a un valor predeterminado y los atributos que establece la persona que llama en el constructor, algo como esto:Para "anular" o no para "anular" los atributos de mi clase

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

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

    // remainder omitted 
} 

Ahora supongamos que tengo una clase de árbol:

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

    // no constructor needed, remainder omitted 
} 

he de establecer el atributo de la raíz a nulo, para marcar que se establece en nulo por defecto, u omitir la hipótesis nula ¿valor?

EDIT:

me ocurrió esa idea después de leer las fuentes de LinkedList y ArrayList, que establece claramente tanto sus atributos (tamaño de LinkedList y firstIndex/lastIndex en ArrayList) a 0.

Respuesta

10

No es necesario para inicializar explícitamente un atributo de tipo de referencia a null. Se inicializará a nulo por defecto. Del mismo modo, existen reglas de inicialización por defecto para los tipos primitivos:

  • atributos booleanos se inicializan a false, y
  • integral (incluyendo char), float y double atributos están inicializados a cero.

Por lo tanto, la inicialización de size en el ejemplo también es estrictamente innecesaria.

Por lo tanto, es puramente una cuestión de estilo si las inicializa o no. Mi opinión personal es que no mejora la legibilidad y, por lo tanto, es una pérdida de tiempo. (No escribo mi código para que lo mantengan personas que no entienden los conceptos básicos de Java ...)

+0

+1 ¿Y qué tal el atributo de tamaño en el primer ejemplo? – helpermethod

+0

@Helper Método: No le has dado a 'size' un tipo, pero asumo que es un' int'. Si es así, es la misma situación: se inicializará a '0' automáticamente. Si tiene un equipo que usa un conjunto diverso de idiomas con diferentes reglas al respecto, tal vez lo explícito sea útil, pero a nivel técnico no es necesario. –

+1

@ T.J. Re: su equipo usa múltiples idiomas; en ese caso, el jefe debería enviar a todos los que lo necesiten a un curso de capacitación en Java. Las personas que intentan mantener programas en un idioma con el que no están familiarizadas son ... peligrosas. –

4

Dado que confía en estas variables que tienen el valor predeterminado (0, null) para una nueva instancia , Los inicializaría para ilustrar al lector que este es el caso. De lo contrario, tendrían que leer más para saber que no hay un constructor donde las variables se inicialicen (posiblemente a otro valor).

Editar: Por supuesto, no es necesario que inicie; Supongo que la pregunta es sobre el estilo preferido y esta es mi preferencia.

3

Es una preferencia personal pero en mi humilde opinión es mejor omitirlo. Las referencias se inicializan con nulo de manera predeterminada, por lo que solo está ocupando el código. Cuanto menos código, mejor.

Cuestiones relacionadas