这个问题是九年前为javascript提出的,但我找不到飞镖的答案。我尝试用enum实现json序列化。有一些库的解决方案,但我想回答dart逻辑。
enum GenderType{
Male,
Female,
NonBinary
}
T? getEnum<T>(String key) {
return (T as Enum).values[_pref?.getInt(key)];
}
我想这样写。虽然我可以调用GenderType.values,但我不能将其称为T.values。
你不能这么做。首先,Enum
类不包含values
列表。第二个原因是枚举中的values
是一个静态字段,即使将它们强制转换为特定类型,也不能在泛型类型上调用静态方法或字段。
你必须这样改变你的功能:
T? getEnum<T>(List<T> values, String key) {
//needs some additional checks if _pref is null or getInt(key) returned null
return values[_pref?.getInt(key)];
}
然后这样称呼它:
GenderType? result = getEnum(GenderType.values, "some_key");
如果您想创建T? getEnum<T>(String key)
,您可以实现这一点,但方式很糟糕。所以这只是一个例子:
T? getEnum<T>(String key) {
if(T == GenderType) {
//needs some additional checks if _pref is null or getInt(key) returned null
return GenderType.values[_pref?.getInt(key)] as T;
}
//if(T == anotherType) {}
//and so on
throw Exception("Unhandled type: $T");
}
但对每种类型使用单独的方法要好得多。