系统里实现常量的方式有三种:
1、接口常量
2、类常量
3、枚举
1、接口常量:jdk1.5之前,没有枚举类,有的用接口来实现系统中的常量。
public interface SwingConstants {
/**
* The central position in an area. Used for
* both compass-direction constants (NORTH, etc.)
* and box-orientation constants (TOP, etc.).
/
public static final int CENTER = 0;
//
// Box-orientation constant used to specify locations in a box.
//
/*
* Box-orientation constant used to specify the top of a box.
/
public static final int TOP = 1;
/*
* Box-orientation constant used to specify the left side of a box.
*/
public static final int LEFT = 2;
}
接口常量,写起来方便,看着简洁,但是为了让其他人知道每个常量的含义,必须写注释,如果需要在用到常量对应的信息时候,需要看着注释来写。
2、类常量
没有枚举的时候使用类常量模拟枚举,用一个Map<Integer, String>来封装常量对应的信息
public class ResponseCode {
/** 系统处理正常 /
public static final int SUCCESS_HEAD = 0;
/* 系统处理未知异常 /
public static final int EXCEPTION_HEAD = 1;
/* JSON解析错误 /
public static final int JSON_RESOLVE = 2;
/* 类型不匹配 /
public static final int TRANSTYPE_NO = 3;
/* Head - messageID未赋值 /
public static final int HEAD_messageID = 4;
/* Head - timeStamp未赋值 /
public static final int HEAD_timeStamp = 5;
/* Head - messengerID未赋值 /
public static final int HEAD_messengerID = 6;
/* Head - transactionType 未赋值 /
public static final int HEAD_transactionType = 7;
/* digest校验不通过 /
public static final int HEAD_DIGEST = 8;
/* src校验不通过 /
public static final int HEAD_SRC_NULL = 10;
/* 协议包含非法字符 /
public static final int ILLEGAL_MESSAGE = 11;
/* 数据库异常 */
public static final int DATABASE_EXCEPTION = 9;
public static final Map<Integer, String> RESP_INFO = new HashMap<Integer, String>();
static {
// Head 相关
RESP_INFO.put(SUCCESS_HEAD, "系统处理正常");
RESP_INFO.put(EXCEPTION_HEAD, "系统处理未知异常");
RESP_INFO.put(JSON_RESOLVE, "JSON解析错误");
RESP_INFO.put(TRANSTYPE_NO, "类型不匹配");
RESP_INFO.put(HEAD_messageID, "messageID未赋值");
RESP_INFO.put(HEAD_timeStamp, "timeStamp未赋值");
RESP_INFO.put(HEAD_messengerID, "messengerID未赋值");
RESP_INFO.put(HEAD_transactionType, "transactionType未赋值");
RESP_INFO.put(HEAD_DIGEST, "digest校验不通过");
RESP_INFO.put(DATABASE_EXCEPTION, "数据库异常");
RESP_INFO.put(HEAD_SRC_NULL, "src未赋值");
RESP_INFO.put(ILLEGAL_MESSAGE, "协议包含非法字符");
}
}
这种类常量比接口常量好,因为可以定义状态码对应的提示信息。
3、枚举
3.1、所有的枚举类都是Enum类的子类,所以可调用Enum的方法。
3.2、枚举作为参数,比常量作为参数时,传参更准确。常量参数只有符号类型即可,枚举参数必须是枚举类才可以。
3.3、枚举可以写静态方法提供多种功能。
注意是逗号分隔属性,只有属性后边没有方法的话,最后加不加分号都行。
public enum Season {
SPRING,SUMMER,AUTUMN ,WINTER
}
4、网友推荐
使用常量类来维护静态枚举。
静态枚举类里面写静态方法。
public class Constants {
private Dict(String value,String name){
this.value=value;
this.name=name;
}
private final String value;
private final String name;
public String getValue() {
return value;
}
public String getName() {
return name;
}
}
}
参考:https://www.cnblogs.com/lihaoyang/p/6913295.html#undefined