java 中常量的定义方式。
问题描述
public class EnumDome { public static final String SUCCESS = 'Y'; public static final String FAIL = 'N'; enum State{SUCCESS('Y'),FAIL('N');private final String state;State(String state){ this.state = state;}public String getState(){ return state;} }}
这两种定义常量的方式各有什么特点?在使用过程中更推荐使用何种方式?
问题解答
回答1:这个问题,从语法层面上来说,没有什么悬念。百度一下常量和枚举的区别就好了。
但是从设计角度上来说,'enum' 要优于 'static final' 的。
这么说可能比较抽象,我举个例子:比如我定义了一个公有函数(更准确的说是公有方法)叫 setResponseState
一种是这样定义的:setResponseState(String state) { ... },使用字符串作参数。
一种是这样定义的:setResponseState(EnumDemo.State state) { ... },使用枚举作参数。
对于第一种定义,正确的调用方式是:setResponseState(EnumDemo.SUCCESS);
但是如果这么调用:setResponseState('abcd'); 是不是在 JAVA 语言的语法上也没有问题呢?
编译器走到这里还是可以通过的……但在运行期可能会导致严重的错误,降低系统的可靠性。
这里的最大问题就是 '函数参数不够明确',这会给使用这个方法的开发人员造成困扰。他不得不去回查我的源码,才能最终确定到底要传一个什么样的参数给我……
而再假如,这个函数(方法)被我封装到一套框架代码中,不提供源码,那么开发人员回查起来就更困难了。这会降低开发效率。
而使用 setResponseState(EnumDemo.State state) { ... } 这样的定义方式,是非常明确的。要么是 SUCCESS,要么是 FAIL,再要么是 null。
开发人员调用这个函数(方法)几乎不会出错,也根本无需回查源码。
所以比较严谨的做法是使用枚举。当然这是在定义公共函数(方法)的时候。
而如果 setResponseState 是一个私有函数(方法),那么可以稍微随意一些,使用字符串参数也是可以的。必定这种 '不严谨' 只暴露给内部。
形象一点的,就是对外我们要显得非常专业,而对内,可以稍微降低一下标准。
这是常量和枚举的两个不同应用场景,希望对你有所帮助……
回答2:简单的说:只有 static final 是定义常量的方法。 后面那个不是,不过功能上是相似的。具体用那个还是取决于你的需求
深入地说:贴地址:
Java 语言中 Enum 类型的使用介绍Java枚举类型(enum)简介
相关文章:
1. web服务器 - Nginx可不可以理解为一个框架,上面跑的都是什么程序?2. Java使用数组的速度比C ++中std :: vector快8倍。我做错什么了?3. 关于网站上传后浏览器不识别的问题4. 修改mysql配置文件的默认字符集重启后依然不生效5. java - 如何在Comparator类中autowire一个接口6. html5 - 在Mac里使用vscode,却无法使用已下载的扩展……7. 在应用配置文件 app.php 中找不到’route_check_cache’配置项8. Android 高德地图如何设置缩放限制级别?9. javascript - 怎样限制同一个浏览器不能登录两个账号10. java - mybatis源码分析

网公网安备