Ich habe eine final class Ring
wie folgt definiert:Case-Ausdrücke müssen konstante Ausdrücke für statische final int sein?
final class Ring {
public static final int OUT = 3;
public static final int MID = 2;
public static final int IN = 1;
}
ich auch eine public class MorrisBoard
mit dem folgenden Code haben:
public class MorrisBoard {
public static final Ring RING = new Ring();
private boolean checkMillBy(int ring, int x, int y) {
switch(ring) {
case MorrisBoard.RING.OUT:
//...
case MorrisBoard.RING.MID: //etc.
//...
}
return false;
}
MorrisBoard.RING.OUT
Referenzen eine Variable, die für die Laufzeit des Programms unveränderlich ist. Alle Werte sind endgültig.
Allerdings bekomme ich immer noch den folgenden Fehler: case expressions must be constant expressions
. Ich bin dadurch verwirrt - MorrisBoard.RING.OUT
ist ein konstanter Ausdruck.
Was ist hier los?
Es lösen müssen Eine _Compile-Zeitkonstante_ und "RING" ist nicht, sie wird zur Laufzeit zugewiesen. –
FYI: Erwägen Sie, eine 'enum' statt einer Reihe von' final static' zu verwenden ... –
Es ist nicht notwendig, eine Instanz einer Klasse zu erstellen, die keine Instanz Mitglieder hat, dh nur statische Mitglieder –