我正在大量基於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的問題(靜態初始化是靜態的)所以如果你在訪問某個靜態值之前調用值,那麼構造函數還沒有被調用。 –