用枚举类型实现Java中的常量

用枚举类型实现Java中的常量

常量

在项目和程序中,经常有一些固定值,在程序运行期间是不变的。如全局的错误码、错误信息,服务器IP和端口,服务名称,系统状态码、项目日志路径等内容。
在java项目中,通常我们会定义一个常量类,并在类中将该固定值设置为静态不可变的数据。而这些常量之中,大部分至少要有两部分,即常量值和常量解释。比较典型的是错误信息这类常量,代码示例如下:

public class SysErrConstant {
	public static final UNKNOWN_CODE = "ERR9999";
	public static final UNKNOWN_MSG = "未知错误";
}

以这种方式定义常量,程序中在使用时可通过 类名.变量名 的形式调用。

log.info(SysErrConstant.UNKNOWN_CODE);
log.info(SysErrConstant.UNKNOWN_MSG);

采用这种方式定义常量,虽然能实现功能,但是很容易在这种常量类中出现数据位置混乱,常量值与解释无法对应,使用和定义比较繁琐等问题。
Java从1.5以后支持枚举类型,使用枚举类型可以有效解决以上问题,并且可以比较方便的供其他类引用。

使用枚举类型定义常量

我们使用枚举类对常量定义和使用的代码进行重新编写,代码如下:

public enum SysErrConstant {
	UNKNOWN("ERR9999","未知错误");
	
	private String code;
	private String msg;

	private SysErrConstant (String code, String msg) {
		this.code = code;
		this.msg = msg;
	}
	private SysErrConstant () {
	}
	
	public String code() {
		return code;
	}

	public String msg(){
		return msg;
	}
}
log.info(SysErrConstant.UNKNOWN.code());
log.info(SysErrConstant.UNKNOWN.msg());

以这种形式定义常量,我们可以将常量的值与常量含义的解释对应起来;同时,由于我们在枚举类型定义时,将引用的方法名与枚举类型中的变量名进行了统一,所以我们不需要再关注每个常量值与常量解释定义的名称,只需要找到要使用的枚举类中对应的名称即可。
另外,我们还可以通过这种形式,将项目中有共性的“魔法数字”、“魔法变量”进行统一的归集,降低编码中出现的错误,增强我们系统的可靠性。
典型的例子,我们常用到的性别、民族、省市县名称等内容,在不同系统或者项目中,经常出现不同的表示方式,增加了很多系统交互之间的问题和成本。又比如在账务系统或会计系统中,我们可以将会计分录中借方、贷方,科目属性等内容用枚举类型处理,能够大大提高代码可读性和系统一致性,方便我们的开发。

 /**
     * 
     * 描述:记账时借方贷方标志(借方Dr 贷方Cr)
     * @Version V1.0
     *
     */
    public enum JzDcInd{
    	Dr("借方","1"),Cr("贷方","2");
    	private String mean;
    	private String val;
    	
    	private JzDcInd(String mean,String val) {
    		this.mean = mean;
    		this.val = val;
    	}
    	private JzDcInd() {
    		
    	}
    	public String mean() {
            return this.mean;
        }
        public String val() {
            return this.val;
        }
    }

以上片段为账务系统中,借方贷方枚举类的示例代码,仅供参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值