2012-09-20 19 views
27

¿Cuál es la mejor práctica para declarar que un archivo java solo tiene constantes?Ejemplos de constante de Java (Crear un archivo java que solo tenga constantes)

public interface DeclareConstants 
{ 
    String constant = "Test"; 
} 

O

public abstract class DeclareConstants 
{ 
    public static final String constant = "Test"; 
} 
+6

variable constante, ¿no es eso un oxímoron? –

+1

@PeterWalser Así que es una variable * estática *. : D Técnicamente estático significa algo diferente que no cambia pero aún así ... –

Respuesta

54

Ninguno de los dos. Use final class for Constants para declararlos como public static final e importar estáticos todas las constantes donde sea necesario.

public final class Constants { 

    private Constants() { 
      // restrict instantiation 
    } 

    public static final double PI = 3.14159; 
    public static final double PLANCK_CONSTANT = 6.62606896e-34; 
} 

Uso:

import static Constants.PLANCK_CONSTANT; 
import static Constants.PI;//import static Constants.*; 

public class Calculations { 

     public double getReducedPlanckConstant() { 
       return PLANCK_CONSTANT/(2 * PI); 
     } 
} 

Ver enlace wiki: http://en.wikipedia.org/wiki/Constant_interface

+1

+1 a él. Usar una interfaz es en realidad un antipatrón. –

+0

@Gilberto: el enlace Wiki describe muy bien :) –

+0

Solo se convierte en un antipatrón cuando implementa la interfaz. Si te fastidia aplicar este uso, no te olvides del constructor final privado de la clase. – millimoose

2

- Crear una Class con public static finalcampos.

- Y luego puede acceder a estos campos desde cualquier clase usando el Class_Name.Field_Name.

- puede declarar la class como final, por lo que el classno puede ampliarse (hereditaria) y modificar ....

+1

Usted es Bienvenido ... –

1

Ambos son válidos, pero normalmente elegir interfaces. Una clase (abstracta o no) no es necesaria si no hay implementaciones.

Como consejo, trate de elegir la ubicación de sus constantes sabiamente, son parte de su contrato externo. No pongas todas las constantes en un solo archivo.

Por ejemplo, si un grupo de constantes solo se usa en una clase o un método, colóquelos en esa clase, la clase extendida o las interfaces implementadas. Si no te ocupas, podrías terminar con un gran desorden de dependencia.

A veces una enumeración es una buena alternativa a las constantes Java (5), tome mira: http://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html

+1

De nada. ¡Realmente me gusta la solución final de clase! (Prueba simulada) –

0

Esta pregunta es viejo. Pero me gustaría mencionar otro enfoque. Usando Enums para declarar valores constantes. Basado en la respuesta de Nandkumar Tekale, el Enum se puede utilizar como a continuación:

Enum: Clase de

public enum Planck { 
    REDUCED(); 
    public static final double PLANCK_CONSTANT = 6.62606896e-34; 
    public static final double PI = 3.14159; 
    public final double REDUCED_PLANCK_CONSTANT; 

    Planck() { 
     this.REDUCED_PLANCK_CONSTANT = PLANCK_CONSTANT/(2 * PI); 
    } 

    public double getValue() { 
     return REDUCED_PLANCK_CONSTANT; 
    } 
} 

Cliente:

public class PlanckClient { 

    public static void main(String[] args) { 
     System.out.println(getReducedPlanckConstant()); 
     // or using Enum itself as below: 
     System.out.println(Planck.REDUCED.getValue()); 
    } 

    public static double getReducedPlanckConstant() { 
     return Planck.PLANCK_CONSTANT/(2 * Planck.PI); 
    } 

} 

Referencia: El el uso de Enums para declarar campos constantes es sugerido por Joshua Bloch en su Eficaz Libro de Java.