如何在Dart中重写枚举的toString方法

5

我想知道是否可以在Dart中重写toString方法,这是我已经有的代码:

enum Style{italic, bold, underline}
Style.italic.toString() 
// print Style.italic, but I want it to be just italic
2个回答

12

目前无法覆盖enum的方法。

编辑:从Dart 2.17开始将会有可能,当时计划发布“增强枚举”功能(如果一切顺利)。

届时,您将能够在enum声明中声明方法并覆盖toString

因此,您将能够执行以下操作:

enum Style {
  italic, bold, underline;

  @override
  String toString() => this.name; 
}

要得到您所请求的内容,请使用以下方法。在Dart 2.15中,枚举值上的name获取器已添加。


你说得完全正确。作为一种解决方法,我们可以使用扩展方法,唯一的问题是我们必须给自定义 toString 方法另一个名称,这是一个例子:extension StyleExtension on Style{ String describe() => toString().split('.').last;} - Ndimah
1
如果这是你的使用情况,我们正在尝试在即将发布的Dart SDK版本中为枚举值添加一个name扩展获取器。目前还没有实现。 - lrn

4
使用 .name 扩展如 MyEnum.value.name
enum Style { italic, bold, underline }

void main(List<String> args) {
  print(Style.italic.name); // italic
}

dartPad 上运行


我正在使用 dart v:2.16.1 - Yeasin Sheikh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接