java 中常量的定义方式。

查看:137
本文介绍了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;
        }
    }
}

这两种定义常量的方式各有什么特点?在使用过程中更推荐使用何种方式?

解决方案

这个问题,从语法层面上来说,没有什么悬念。百度一下常量和枚举的区别就好了。

但是从设计角度上来说,"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 是一个私有函数(方法),那么可以稍微随意一些,使用字符串参数也是可以的。必定这种 "不严谨" 只暴露给内部。

形象一点的,就是对外我们要显得非常专业,而对内,可以稍微降低一下标准。

这是常量和枚举的两个不同应用场景,希望对你有所帮助……

这篇关于java 中常量的定义方式。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆