当前位置: 首页 > news >正文

Android学Dart学习笔记第二十节 类-枚举

枚举类型,通常称为枚举或枚举,是一种特殊的类,用于表示固定数量的常量值。

定义一个简单的枚举

关键字都是一样的

enumColor{red,green,blue}

可以以,结尾以便利于复制,而不会产生问题

enumColor{red,green,blue,}voidmain(){print(Color.values.length);//3}

定义一个增强枚举

Dart还允许enum声明使用字段、方法和const构造函数来声明类,这些构造函数限制为固定数量的已知常量实例。

声明增强型枚举时,遵循与普通类类似的语法,但有一些额外要求:
实例变量必须是 final,包括由 mixin 添加的变量
所有生成式构造函数必须是 const
工厂构造函数只能返回固定的、已知的枚举实例之一
不能继承其他类,因为 Enum 会自动被继承
不能重写 index、hashCode 或相等运算符 ==
不能在枚举中声明名为 values 的成员,因为它会与自动生成的静态 values getter 冲突
枚举的所有实例必须在声明开头声明,并且必须至少声明一个实例

增强枚举中的实例方法可以使用this来引用当前枚举值。

enumVehicleimplementsComparable<Vehicle>{car(tires:4,passengers:5,carbonPerKilometer:400),bus(tires:6,passengers:50,carbonPerKilometer:800),bicycle(tires:2,passengers:1,carbonPerKilometer:0);constVehicle({requiredthis.tires,requiredthis.passengers,requiredthis.carbonPerKilometer,});finalint tires;finalint passengers;finalint carbonPerKilometer;intgetcarbonFootprint=>(carbonPerKilometer/passengers).round();boolgetisTwoWheeled=>this==Vehicle.bicycle;@overrideintcompareTo(Vehicle other)=>carbonFootprint-other.carbonFootprint;}

增强枚举最低要求2.17的语言版本

如何使用枚举

枚举的访问也和java一样

finalfavoriteColor=Color.blue;if(favoriteColor==Color.blue){print('Your favorite color is blue!');}

每个枚举都有下标值,也是从0开始

assert(Color.red.index==0);assert(Color.green.index==1);assert(Color.blue.index==2);

要获取所有枚举值的列表,请使用.value

List<Color>colors=Color.values;assert(colors[2]==Color.blue);

你可以在switch中使用枚举,如果你没有考虑到所有的分支
,将会报错,你也可以使用default或者case _,
如果你对switch还不了解,可以看看之前的文章 dart 分支

varaColor=Color.blue;switch(aColor){caseColor.red:print('Red as roses!');caseColor.green:print('Green as grass!');default:// Without this, you see a WARNING.print(aColor);// 'Color.blue'}

如果您需要访问枚举值的名称,可以使用.name

print(Color.blue.name);// 'blue'

你同样可以访问枚举对象的成员,和访问对象一样

print(Vehicle.car.carbonFootprint);
http://www.cnnetsun.cn/news/117030.html

相关文章:

  • MCP协议驱动企业级AI集成:芋道源码的智能化升级实践
  • 终极指南:使用gsplat.js实现高性能3D高斯点云渲染
  • 把CNN和SVR捏在一起做预测这事儿,乍听有点玄乎,实操起来倒挺有意思。咱们今天不整那些虚头巴脑的理论,直接上手撸代码。先甩个模型结构出来镇楼
  • Memobase完整安装指南:构建AI长期记忆系统的7个关键步骤
  • Faiss HNSW性能瓶颈突破:5步诊断与3倍提速优化实战
  • 5个立竿见影的wgpu性能优化技巧:让你的Rust图形应用帧率翻倍
  • 1000 人并发 + 4K 高清,3 大行业案例见证协作效率翻倍
  • 字符串的拼接函数:strcat()
  • GraphRAG-Local-UI终极指南:本地知识图谱构建与智能查询完整教程
  • Messari:Flow 生态 2025 年 Q3 发展概览
  • Draft.js工具栏深度定制:构建企业级富文本编辑器的完整实践
  • 下一个版本EmotiVoice将带来哪些惊喜?
  • 明诺多功能全自动洗地机,适用于超市、地库及商场清洁需求
  • 最近网上爆火的Flowith AI是啥?能否成为下一代AI Agent产品?
  • CesiumJS体素渲染终极指南:3D体积数据可视化完整解析
  • LrcApi终极指南:快速构建专业级歌词同步服务的完整方案
  • DeepSeek-V3.2-Exp推理部署终极指南:从模型文件到生产服务的完整路径
  • CVAT用户权限配置完整教程:从基础到高级的团队协作管理终极指南
  • ADC调试踩坑:一个printf引发的“血案“
  • 关键词:一致性算法;直流微电网;下垂控制;分布式二次控制;电压电流恢复与均分;非线性负载
  • ComfyUI-Manager安全权限终极指南:快速解决权限问题
  • Electronic WeChat个性化配置完全指南:从入门到精通
  • I2C总线:时序结构与数据帧
  • 适合新手的电脑版AI编曲软件快速根据哼唱清唱主旋律作伴奏
  • ZW3D二次开发_分享一个通过命令按钮查找关联API函数的插件
  • 【光照】Unity[光照探针]的作用与工作原理
  • 你有没有想过,像 ChatGPT 这样聪明的 AI,它是怎么“出生”的?
  • 基于单片机的数字电压表设计
  • 强化学习系统性学习笔记(二):策略优化的理论基础与算法实现
  • 基于STM32银行医院柜台叫号排队系统语音播报设计