我正在大量基于Java枚举移植一个库,并需要编写自己的枚举,直到它们有本地支持。失败枚举尝试
但是我失败了!
在ChessColor.values下面的代码()方法返回null,我不明白为什么。
不过,我是新来省道......
与静态字段和初始化,我已经错过了一定有什么东西......
枚举的基类
part of chessmodel;
/**
* Emulation of Java Enum class.
*/
abstract class Enum {
final int code;
final String name;
Enum(this.code, this.name);
toString() => name;
}
一个简单的使用尝试
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;
}
}
退房就如何构建镖枚举这样一个问题:http://stackoverflow.com/q/15854549/1479964 –
看到,但我需要values()和valuOf(String name)所以我做了这个尝试。 –
你有正确的想法。但是我没有看到您使用的所有代码,但我认为这是您运行到https://groups.google.com/a/dartlang.org/d/topic/misc/dKurFjODRXQ/discussion的问题(静态初始化是静态的)所以如果你在访问某个静态值之前调用值,那么构造函数还没有被调用。 –