Estoy mirando algunos proyectos Java de código abierto para ingresar a Java y noto que muchos de ellos tienen algún tipo de interfaz de 'constantes'.
Por ejemplo, processing.org tiene una interfaz llamada PConstants.java , y la mayoría de las otras clases principales implementan esta interfaz. La interfaz está plagada de miembros estáticos. ¿Hay alguna razón para este enfoque o se considera una mala práctica? ¿Por qué no usar enumeraciones donde tenga sentido , o una clase estática?
Me parece extraño usar una interfaz que permita algún tipo de pseudo 'variables globales'.
public interface PConstants {
// LOTS OF static fields...
static public final int SHINE = 31;
// emissive (by default kept black)
static public final int ER = 32;
static public final int EG = 33;
static public final int EB = 34;
// has this vertex been lit yet
static public final int BEEN_LIT = 35;
static public final int VERTEX_FIELD_COUNT = 36;
// renderers known to processing.core
static final String P2D = "processing.core.PGraphics2D";
static final String P3D = "processing.core.PGraphics3D";
static final String JAVA2D = "processing.core.PGraphicsJava2D";
static final String OPENGL = "processing.opengl.PGraphicsOpenGL";
static final String PDF = "processing.pdf.PGraphicsPDF";
static final String DXF = "processing.dxf.RawDXF";
// platform IDs for PApplet.platform
static final int OTHER = 0;
static final int WINDOWS = 1;
static final int MACOSX = 2;
static final int LINUX = 3;
static final String[] platformNames = {
"other", "windows", "macosx", "linux"
};
// and on and on
}
platformNamespuede haber public, staticy final, pero definitivamente no es una constante. La única matriz constante es una con longitud cero.
static finalno es necesariamente redundante. Un campo de clase o interfaz con solo la finalpalabra clave crearía instancias separadas de ese campo a medida que crea objetos de la clase o interfaz. El uso static finalharía que cada objeto compartiera una ubicación de memoria para ese campo. En otras palabras, si una clase MyClass tuviera un campo final String str = "Hello";, para N instancias de MyClass, habría N instancias del campo str en la memoria. Agregar la staticpalabra clave daría como resultado una sola instancia.
static finalno es necesario, es redundante para una interfaz.