有没有办法将泛型类型限制为 an enum,类似于以下内容?
class MyClass<T extends enum> {}
Run Code Online (Sandbox Code Playgroud)
喜欢的东西在C# 。
xba*_*laj 31
从 Dart 2.16 开始,现在可以将泛型类型限制为 Enum。
您可以通过以下方式执行此操作:
class MyClass<T extends Enum> {}
Run Code Online (Sandbox Code Playgroud)
T现在您只能传递给枚举的泛型参数MyClass。
在 Dart 中这是不可能的。我在将枚举属性转换为 SQLite 数据库(只能保存其数字类型)时遇到了同样的问题,因此我需要enum.values将整数“解析”为枚举enum.index并将枚举值转换为 int。
唯一可能的方法是将枚举转换为动态或传递枚举值。
例子:
T mapToEnum<T>(List<T> values, int value) {
if (value == null) {
return null;
}
return values[value];
}
dynamic enumToMap<T>(List<T> values, T value) {
if (value == null) {
return null;
}
return values.firstWhere((v) => v == value);
}
Run Code Online (Sandbox Code Playgroud)
所以我可以这样使用:
final SomeEnum value = SomeEnum.someValue;
final int intValue = enumToMap(SomeEnum.values, value);
final SomeEnum enumValue = mapToEnum(SomeEnum.values, value.index);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2068 次 |
| 最近记录: |