java为什么需要枚举_java – 什么是枚举,为什么它们有用?

2023-11-03

当变量(特别是方法参数)只能从一组可能的值中取出一个时,应该总是使用枚举。示例将是类型常量(合同状态:“永久”,“临时”,“学徒”)或标志(“立即执行”,“延迟执行”)。

如果使用枚举而不是整数(或字符串代码),则增加了编译时检查,避免传入无效常量的错误,并记录哪些值是合法使用的。

BTW,过度使用枚举可能意味着你的方法太多了(通常最好有几个单独的方法,而不是一个方法,需要几个标志,它修改它的作用),但如果你必须使用标志或类型代码,枚举是要走的路。

例如,哪个更好?

/** Counts number of foobangs.

* @param type Type of foobangs to count. Can be 1=green foobangs,

* 2=wrinkled foobangs, 3=sweet foobangs, 0=all types.

* @return number of foobangs of type

*/

public int countFoobangs(int type)

/** Types of foobangs. */

public enum FB_TYPE {

GREEN, WRINKLED, SWEET,

/** special type for all types combined */

ALL;

}

/** Counts number of foobangs.

* @param type Type of foobangs to count

* @return number of foobangs of type

*/

public int countFoobangs(FB_TYPE type)

一个方法调用:

int sweetFoobangCount = countFoobangs(3);

然后变成:

int sweetFoobangCount = countFoobangs(FB_TYPE.SWEET);

在第二个例子中,它立即清楚哪些类型是允许的,docs和实现不能失去同步,编译器可以强制这样做。

此外,一个无效的调用像

int sweetFoobangCount = countFoobangs(99);

不再可能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java为什么需要枚举_java – 什么是枚举,为什么它们有用? 的相关文章

  • 软件系统概要设计的三大要素

    概要设计是一个设计师根据用户交互过程和用户需求来形成交互框架和视觉框架的过程 其结果往往以反映交互控件布置 界面元素分组以及界面整体板式的页面框架图的形式来呈现 这是一个在用户研究和设计之间架起桥梁 使用户研究和设计无缝结合 将对用户目标与
  • Python反编译exe文件为py文件

    目的如标题 首先要安装python环境 1 下载pyinstxtractor py文件 地址 链接 https pan baidu com s 1PwQim8B8yau5 MWgKzTKeg pwd 2023 提取码 2023 2 将pyi
  • linux-三剑客(sed、awk、grep)

    三剑客sed awk grep 三剑客与正则表达式是什么关系呢 正则表达式 grep 文本过滤工具 sed 操作 过滤和转换文本内容的强大工具 组合多个表达式 引用 定界符 命令中字符 在sed中作为定界符使用 也可以使用任意的定界符 se
  • 小程序canvas上绘制图片真机不显示

    小程序在画布上绘制图片时真机不显示 分析 小程序的画布不能绘制网络图片 所以需要wx downloadFile 或者wx getImageInfo 方法把网络图片加载到本地再进行绘制 使用wx downloadFile获取到图片的临时路径
  • wireshark 抓取 https

    背景介绍 首先 https双向加密的 如果需要解密数据 除非知道 客户端 服务器 任何一方私钥 否则无法解密 常用手段 基于中间人攻击抓包 使用fiddler 或 charles 实现的是中间人代理 将客户端私钥改为 fiddler 或 c
  • Roslyn介绍

    介绍 一般来说 编译器是一个黑箱 源代码从一端进入 然后箱子中发生一些奇妙的变化 最后从另一端出来目标文件或程序集 编译器施展它们的魔法 它们必须对所处理的代码进行深入的理解 不过相关知识不是每个人都需要知道 除了实现编译器的大法师 因此在
  • 李宏毅机器学习:self-attention(自注意力机制)和transformer及其变形

    目录 self attention self attention的输入 文字处理领域 语音领域 图 自注意力机制的输出 输出序列长度与输入序列相同 输出序列长度为1 模型决定输出序列长度 Self attention 原理 self att
  • codeforces Epic Game 题解

    Simon and Antisimon play a game Initially each player receives one fixed positive integer that doesn t change throughout
  • MOT学习 - 卡尔曼滤波

    参考资料 https www bzarg com p how a kalman filter works in pictures 协方差矩阵 https youzipi blog csdn net article details 48788
  • 关于Qt和C++中的反射机制实现与运用(2)

    看到一个很好的实例 这里就转载过来了 原文地址 C 反射机制 一 前言 Java有着一个非常突出的动态相关机制 Reflection 用在Java身上指的是我们可以于运行时加载 探知 使用编译期间完全未知的classes 换句话说 Java
  • Springboot+Vue前后端分离实现token登录验证和状态保存

    token可用于登录验证和权限管理 大致步骤分为 前端登录 post用户名和密码到后端 后端验证用户名和密码 若通过 生成一个token返回给前端 前端拿到token用vuex和localStorage管理 登录成功进入首页 之后前端每一次
  • 从放弃到再入门之拉格朗日对偶问题推导

    https blog csdn net qq 34564612 article details 79974635
  • 【第19篇】SSD论文翻译和代码汇总

    文章目录 摘要 1 简介 2 单次检测器 SSD 2 1 模型 2 2 训练 3 实验结果 3 1 PASCAL VOC2007 3 2 模型分析 3 3 PASCAL VOC2012 3 4 COCO 3 5 初步的ILSVRC结果 3
  • 2021-07-08

    阿里DevOps发布策略简介 前言 DevOps追求更短的迭代周期 更高频的发布 但发布的次数越多 引入故障的可能性就越大 更多的故障将会降低服务的可用性 进而影响到客户体验 所以 为了保证服务质量 守好发布这个最后一道关 阿里逐步发展出了
  • Vue3+Element-Plus中的Tree组件,多选时的赋值与取值

    el tree 是 element ui 提供的一个树形组件 可以在 Vue js 应用中使用 el tree 组件提供了 getCheckedNodes 方法 可以用来获取树形结构中被选中的节点
  • C/C++混合编程编译问题

    以下为本实验使用的编译器版本 系统环境为 目的 搞清以下几个问题 1 g 能否编译c文件 2 g 编出的s文件和gcc编出来的有何异同 3 cplusplus宏在何时被定义 4 c调用c 的注意事项 5 c 调用c的注意事项 6 针对上述问
  • js检测是否为数组的方法-JavaScript学习笔记

    1 方法一 instanceof 运算符 它可以用来检测是否为数组 代码 var arr var obj console log arr instanceof Array true console log obj instanceof Ar
  • Spring Boot 学习研究笔记(九) - Spring Data JPA常用注解

    Spring Data JPA 常用注解详细说明 1 Entity Entity 说明这个class 是实体类 并且使用默认的orm 规则 即 class 名对应数据库表中的表明 class 字段名即表中的字段名 如果想要改变这种默认的or
  • shell之多分支if语句

    1 语法格式 if 条件测试1 then 命令序列1 elif 条件测试2 then 命令序列2 elif 条件测试3 then 命令序列3 else 命令序列n fi 2 吃鸡段位排行 bin bash Author hejing Dat

随机推荐

  • 蓝牙硬件设备没有链接到计算机,电脑未发现蓝牙硬件设备怎么办

    有时我们想连接蓝牙硬件设备 却发现找不到了 没发现 怎么办 下面是学习啦小编为大家介绍电脑未发现蓝牙硬件设备的解决方法 欢迎大家阅读 电脑未发现蓝牙硬件设备的解决方法 首先我们在桌面找到 我的电脑 当然如果是WIN7 WIN8等系统以上的电
  • Postman 中文汉化界面

    参考 大佬的Gitee地址 gitee地址
  • GateWay 中StripPrefix的作用

    StripPrefix网关过滤器工厂采用一个参数StripPrefix StripPrefix参数表示在将请求发送到下游之前从请求中剥离的路径个数 spring cloud gateway routes id crm uri http cr
  • [1068]启动hdfs时,报错 Canary 测试无法在目录 /tmp/.cloudera_health_monitoring_canary_files 中创建文件

    启动hdfs时 报错 Canary 测试无法在目录 tmp cloudera health monitoring canary files 中创建文件 经过查看日志 发现 Name node is in safe mode 解决方法 sud
  • python练习10

    活动 10 while 循环的应用实例 一 程序示例 问 题 编程实现 猜数游戏 在给定某数后 让用户进行猜测并输入数 计算机给出相应提示 如偏大 偏小或正 确 若所猜测的数正确 则输出猜测次数 否则继续猜数 设计算法 初始 给定数 num
  • logback最详细配置讲解,及命名规范

    介绍 logback是一款日志框架 这个就不详细赘述了 命名规范 一般来说logback的配置文件可以命名为logback xml 项目启动时就可以读取到里面的配置 但是在spring boot项目中 这样会有一点问题 因为logback
  • 通过Docker方式安装海思Hi3516EV200交叉编译工具arm-himix100-linux

    前言 安装交叉编译环境 繁琐 耗时间 还得解决ubuntu版本不同 导致的各种错误 docker很好的解决了 不同版本 不同系统之间的差异性的问题 DOPI制作了docker方式的交叉编译环境 工作环境 vmare安装的ubuntu18 0
  • 实现前端项目自动化部署(webpack+nodejs)

    前言 一般来说 我们前端是不需要关心部署的事情的 只需要把打包后的文件直接丢给后台去部署就可以了 但是呢 如果频繁修改一点东西就要叫后台进行部署 这样后台会很烦 毕竟人家还有其他工作嘛 我们也会很不好意思 或许有些公司会给前端配置可视化操作
  • 静态时序分析——基础概念

    一 简述 静态时序分析是检查系统时序是否满足要求的主要手段 以往时序的验证依赖于仿真 采用仿真的方法 覆盖率跟所施加的激励有关 有些时序违例会被忽略 此外 仿真方法效率非常的低 会大大延长产品的开发周期 静态时序分析工具很好地解决了这两个问
  • Java的冒泡排序方法

    废话不多说 直接上代码 看不懂的话可以看注释 在这里插入代码片 public static void bubbleSort int arr 标志位 标志是否进行交换 boolean flag false for int i 0 i lt a
  • java 双列集合Map 万字详解

    目录 一 前言 二 概述 三 特点 四 常用方法 1 V put K key V value 代码演示 2 V get Object key 代码演示 3 V remove Object key 代码演示 4 int size 代码演示 5
  • excel两个指标相关性分析_指数相关性如何计算?

    且慢上长赢指数计划中有个指标叫相关性 这是统计学概念 主要看两个数列之间的相关程度 用在指数投资上 用作分散参照 如果两只指数的相关性越高 说明指数走势高度相似 涨的时候都涨 跌的时候都跌 起不到平衡或者分散风险的目的 因而 在投资时 尽量
  • 力扣 - 106、从中序与后序遍历序列构造二叉树

    题目 根据一棵树的中序遍历与后序遍历构造二叉树 注意 你可以假设树中没有重复的元素 例如 给出 中序遍历 inorder 9 3 15 20 7 后序遍历 postorder 9 15 7 20 3 返回如下的二叉树 3 9 20 15 7
  • 活锁和饥饿

    活锁 活锁本质上不是锁 是互相干扰导致线程无法跳出循环 比如 public class TestLiveLock static volatile int count 10 static final Object lock new Objec
  • SpringBoot 自定义注解(一)参数校验

    SpringBoot 2 3 0版本之后就没有引入validation对应的包 需要手动引用 依赖如下
  • ​JVM-调优参数归纳​

    本地线程分配缓冲 XX UseTLAB 把内存分配的动作按照线程划分在不同的空间之中进行 即每个线程在Java堆中预先分配一小块内存 通过 XX UseTLAB参数来设定虚拟机是否使用TLAB JVM会默认开启 XX UseTLAB XX
  • moviepy剪切视频&spleeter视频降噪-CPU&GPU

    文章目录 简介 安装spleeter 代码执行 简介 moviepy官方中文API spleeter官方github 本文视频降噪原理为使用spleeter提取出人声 仅将人声写回视频并保存 对于AudioClip和VideoClip使用完
  • 三分钟带你了解ES【详解版】

    1 ES是什么 Elasticsearch 是一个分布式的 RESTful 搜索和分析引擎 可用来集中存储您的数据 以便您对形形色色 规模不一的数据进行搜索 索引和分析 上面是 官网 API文档 对的定位描述 ES 是一个分布式的搜索引擎
  • 使用机器学习和深度学习技术预测股票价格

    介绍 预测股市的走势是最困难的事情之一 影响预测的因素很多 包括物理因素与心理因素 理性行为和非理性行为等 所有这些因素结合在一起共同导致股价波动 很难以高精度预测 我们是否可以将机器学习作为该领域的游戏规则改变者吗 利用一些特性 比如关于
  • java为什么需要枚举_java – 什么是枚举,为什么它们有用?

    当变量 特别是方法参数 只能从一组可能的值中取出一个时 应该总是使用枚举 示例将是类型常量 合同状态 永久 临时 学徒 或标志 立即执行 延迟执行 如果使用枚举而不是整数 或字符串代码 则增加了编译时检查 避免传入无效常量的错误 并记录哪些