Je suis en train de porter une bibliothèque fortement basée sur des enums Java et j'ai besoin de coder ma propre énumération jusqu'à ce qu'il y ait un support natif pour eux.Échec de tentative d'énumération
Cependant, j'échoue!
Dans le code ci-dessous, la méthode ChessColor.values () renvoie null et je ne vois pas pourquoi.
Cependant, je suis nouveau à Dart ...
Il doit y avoir quelque chose avec les champs statiques et initialisation que j'ai manqué ...
Enum classe de base
part of chessmodel;
/**
* Emulation of Java Enum class.
*/
abstract class Enum {
final int code;
final String name;
Enum(this.code, this.name);
toString() => name;
}
Une simple utilisation essayer
part of chessmodel;
final ChessColor WHITE = ChessColor.WHITE;
final ChessColor BLACK = ChessColor.BLACK;
class ChessColor extends Enum {
static List<ChessColor> _values;
static Map<String, ChessColor> _valueByName;
static ChessColor WHITE = new ChessColor._x(0, "WHITE");
static ChessColor BLACK = new ChessColor._x(1, "BLACK");
ChessColor._x(int code, String name) : super (code, name) {
if (_values == null) {
_values = new List<ChessColor>();
_valueByName = new Map<String, ChessColor>();
}
_values.add(this);
_valueByName[name] = this;
}
static List<ChessColor> values() {
return _values;
}
static ChessColor valueOf(String name) {
return _valueByName [name];
}
ChessColor opponent() {
return this == WHITE ? BLACK : WHITE;
}
bool isWhite() {
return this == WHITE;
}
bool isBlack() {
return this == BLACK;
}
}
Vérifiez cette question sur la façon de construire énumérations dans fléchette: http://stackoverflow.com/q/15854549/1479964 –
Saw, mais je dois the values () et valuOf (String name) donc j'ai fait cette tentative. –
Et vous avez la bonne idée.Mais je n'ai pas vu tout le code que vous utilisez mais je pense que c'est le problème que vous rencontrez https://groups.google.com/a/dartlang.org/d/topic/misc/dKurFjODRXQ/discussion (Les statistiques sont initialisées paresseux) donc si vous appelez des valeurs avant d'avoir accédé à l'une des valeurs statiques, le constructeur n'est pas encore appelé. –