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

tjvv9vkg  于 2022-12-19  发布在  Flutter
关注(0)|答案(1)|浏览(360)

这个问题是九年前javascript的问题,但我找不到dart的答案。我尝试用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。

xlpyo6sf

xlpyo6sf1#

你不能这样做。首先Enum类不包含values列表。第二个原因是枚举中的values是一个静态字段,你不能调用泛型类型上的静态方法或字段,即使你将它们转换为特定类型。
如果你想创建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");
}

但最好对每种类型使用单独的方法。

相关问题