将中的Enum.values与dart中的泛型类一起使用



这个问题是九年前为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");
}

但对每种类型使用单独的方法要好得多。

相关内容

  • 没有找到相关文章

最新更新