Étant donnée une ENUM où chaque instance est associée à une certaine valeur:Comment mapper une valeur en une énumération?
public enum SQLState
{
SUCCESSFUL_COMPLETION("00000"),
WARNING("01000");
private final String code;
SQLState(String code)
{
this.code = code;
}
}
Comment puis-je construire une carte pour un look-up inverse efficace? J'ai essayé les éléments suivants:
public enum SQLState
{
SUCCESSFUL_COMPLETION("00000"),
WARNING("01000");
private final String code;
private static final Map<String, SQLState> codeToValue = Maps.newHashMap();
SQLState(String code)
{
this.code = code;
codeToValue.put(code, this); // problematic line
}
}
mais Java se plaint: Illegal reference to static field from initializer
. C'est-à-dire que la Map statique est en cours d'initialisation après toutes les valeurs enum de sorte que vous ne pouvez pas la référencer depuis le constructeur. Des idées?
Pour l'exemple canonique dans la JLS, voir http://java.sun.com/docs/books/jls/third_edition/html/classes.html#324268 –