Quando si accede a un membro statico di un oggetto (incluse le enumerazioni) in Java, il compilatore sostituisce efficacemente l'oggetto con il suo tipo statico. Più 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();
}
}
Analogamente, poiché enumerazioni sono effettivamente "statica", Season.WINTER.SPRING
è equivalente a Season.SPRING
; Season.WINTER
viene sostituito con il tipo enum Season
.
Come nota a margine, l'accesso ai membri statici dalle istanze è scoraggiato perché può essere piuttosto confuso. Ad esempio, se hai visto un pezzo di codice che conteneva someThread.sleep()
, potresti essere indotto a credere che someThread
sia stato messo a riposo. Tuttavia, dal momento che sleep()
è statico, il codice sta effettivamente invocando Thread.sleep()
che dorme il thread corrente.
È equivalente a "INVERNO | SPRING'? –
Season.WINTER.SPRING è equivalente a Season.SPRING –
Zach L ha ragione. –