Dart 语言中为枚举添加方法的两种方式
开篇
在 Dart 2.17 中,枚举(Enum)得到了重大更新。现在,枚举可以拥有自己的成员变量
、成员方法
、构造函数
,甚至还能覆盖现有成员。
本篇通过一段用于将枚举状态转换为温度的代码示例,演示枚举(Enum)更新前后的主要差异。
Dart < 2.17
1enum Water {
2 frozen,
3 boiling,
4 // ...
5}
6
7extension Members on Water {
8 int waterToTemp(Water water) {
9 switch (water) {
10 case Water.frozen:
11 return 32;
12 // ...
13 }
14 }
15
16 String convertToTstring() => "The $name water is ${waterToTemp(this)} F."
17}
18
19void main() {
20 print(Water.frozen.convertToString());
21}
Dart >= 2.17
1enum Water {
2 frozen(32);
3 boiling(212);
4 // ...
5
6 final int tempInFahrenheit;
7
8 const Water(this.tempInFahrenheit);
9
10 @verride
11 String toString() => "The $name water is $tempInFahrenheit F."
12}
13
14void main() {
15 print(Water.frozen);
16}