2012-04-02 8 views
5

Duplicar posible:
When should one use final?¿Debo usar el modificador "final" al crear objetos de fecha?

Cuando los programadores de Java deben preferir utilizar

final Date now = new Date(); 

sobre

Date now = new Date(); 
+0

Depende de cómo desea utilizarlo. En la mayoría de los casos, realmente no creo que importe. – AedonEtLIRA

+1

De acuerdo con aix: no hay nada sobre el uso de 'final' que sea específico de las variables' Date'. –

+0

Pregunté no tan claramente en qué estaba interesado ...Este http://stackoverflow.com/questions/266806/is-there-any-performance-reason-to-declare-method-parameters-final-in-java es lo que yo quería ... – Zango

Respuesta

7

Además de decidir si una variable debe ser definitiva o no, que está cubierta en otras publicaciones, creo que el problema con final Date now = ... es que aunque la referencia a ahora no cambiará (es definitiva), su valor podría ser. Así que encuentro esto un poco engañoso para los desarrolladores que no saben que Date es mutable. Por ejemplo, podría escribir:

public static void main(String[] args) { 
    final Date now = new Date(); 
    System.out.println(now); 
    now.setHours(5); 
    System.out.println(now); 
} 

y obtener 2 fechas diferentes de su fecha límite ...

Ahora bien, esto es cierto para cualquier variable mutable (el contenido de final List<String> l puede cambiar también), pero creo que en el caso de una Fecha, es demasiado fácil asumir la inmutabilidad.

Una solución mejor sería mediante la biblioteca de tiempo joda:

final DateTime now = new DateTime(); 

en este caso, now es inmutable y no va a cambiar (referencia & valor).

+0

Esos métodos setter están en desuso, pero tiene razón, pueden ser llamados. La tuya es la única respuesta correcta que he visto hasta ahora. 1+ –

2

Cuando utiliza la palabra clave final, nunca puede cambiar el valor de la variable. Al igual, solicite la fecha.

3

En Java, una variable final es una variable cuyo valor, una vez asignado, no se puede cambiar. Usted declara una variable final cuando a esa variable se le asignará un valor, y nunca tendrá que cambiar ese valor.

+1

Pregunta es cuál sería el ventaja, no lo que hace el final. – TheBlastOne

1

Una última variable se puede inicializar explícitamente sólo una vez. Una variable de referencia declarada final nunca se puede reasignar para referirse a un objeto diferente.

Sin embargo los datos dentro del objeto se pueden cambiar. Entonces el estado del objeto puede ser cambiado pero no la referencia.

Con las variables, el modificador final de a menudo se usa con estática para hacer la constante de una variable de clase. Ejemplo:

class Test{ 
    final int value=10; 
    // The following are examples of declaring constants: 
    public static final int BOXWIDTH = 6; 
    static final String TITLE = "Manager"; 

    public void changeValue(){ 
    value = 12; //will give an error 
    } 
} 

si su requerimiento es de este tipo que se puede utilizar final con la fecha.

+0

+1 para los primeros 2 párrafos :). –

1

Si declara un campo, que es de solo lectura, y desea tener una clase segura para subprocesos, debe usar el modificador final. A veces se ve obligado a hacer una variable final, si se usa en una clase anónima. En todos los demás casos, realmente no importa.

Cuestiones relacionadas