Les expressions de cas doivent être des expressions constantes pour static int final?

J'ai un final class Ring défini comme:

final class Ring {
    public static final int OUT = 3;
    public static final int MID = 2;
    public static final int IN  = 1;
}

J'ai aussi un public class MorrisBoard avec le code suivant:

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 fait référence à une variable qui est immuable pour la durée de vie du programme. Toutes les valeurs sont en finale.

Cependant, j'ai toujours l'erreur suivante: case expressions must be constant expressions. Je suis confus par cette - MorrisBoard.RING.OUT est une expression constante.

Ce qui se passe ici?

source d'informationauteur Zyerah