在Dart中将整数转换为泛型枚举

dkqlctbz  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(138)

我有一个整数,我想在Dart中转换成一个枚举。我想用泛型来做这件事,这样我就不必为每种可能的枚举一次又一次地编写相同的代码。
我知道如何对一种特殊的枚举per this answer执行此操作,方法是像这样使用索引操作符[]

T get notQuiteGenericEnumGetter {
    int i = fromSomeplace();
    if (T == MyEnum) {
        return MyEnum.values[i] as T;
    }else if (T ==
    // tests for other sorts of enumes
}

但我真正想要的是泛型地完成这件事,这样我就不需要一长串的if语句,每个可能的枚举都有一个if语句,我宁愿使用泛型来做这样的事情。

T get genericEnumGetter {
    int i = fromSomeplace();
    if (T == Enum) {
        return T.values[i] as T;
    }
}

但是如果我将enum拼写为“enum”(未定义的名称)或“Enum”(getter value不是为Type定义的),这就不起作用了。
我也尝试了return (T as Enum).values[i] as T;,我被告知getter 'values'不是为'Enum'类型定义的,这让我想知道MyEnum.values是如何工作的。
所以我想我的问题是,在没有显式测试枚举风格的情况下将int转换为枚举的想法是没有希望的,还是有一些方法可以通用地将整数转换为枚举。

33qvvth1

33qvvth11#

你想做的事情是不可能的,原因有很多。

  • 即使对于非Enum类,T.anything也永远不能工作,因为static成员不是Dart中类接口的一部分。static成员本质上是全局变量的语法糖。为Enum类型自动生成的values列表没有什么不同。
  • Dart currently does not allow generic getters

即使Dart允许泛型getter(或者如果您将其更改为普通泛型函数),您也需要显式指定Enum类型名称(从哪里推断出来?),此时您还可以键入MyEnum.values[i],这只是稍微有点不方便。
我也尝试了return (T as Enum).values[i] as T;,我被告知getter 'values'不是为'Enum'类型定义的,这让我想知道MyEnum.values是如何工作的。
Enum是用enum声明的基类型。Enum本身没有values成员;Enum没有值!只有用enum声明的具体类型才有合成的values成员。(另见Where is "values" defined in a List of enum?

相关问题