Cuando accede a un miembro estático de un objeto (incluidas enumeraciones) en Java, el compilador reemplaza efectivamente el objeto con su tipo estático. Más concretamente,
class ExampleClass {
static int staticField;
static void staticMethod() {
ExampleClass example = new ExampleClass();
example.staticField; // Equivalent to ExampleClass.staticField;
example.staticMethod(); // Equivalent to ExampleClass.staticMethod();
}
}
Del mismo modo, puesto que las enumeraciones son efectivamente "estático", Season.WINTER.SPRING
es equivalente a Season.SPRING
; Season.WINTER
se reemplaza por su enumeración tipo Season
.
Como nota al margen, no se recomienda el acceso a miembros estáticos de las instancias porque puede ser bastante confuso. Por ejemplo, si vio un fragmento de código que contenía someThread.sleep()
, es posible que le engañen haciéndole creer que someThread
ha quedado dormido. Sin embargo, dado que sleep()
es estático, ese código está realmente invocando Thread.sleep()
que duerme el hilo actual.
Equivale a 'INVIERNO | PRIMAVERA? –
Season.WINTER.SPRING es equivalente a Season.SPRING –
Zach L tiene razón. –