枚举类型介绍
java中对常量数据的配置可以使用枚举类型实现,枚举类型是面向对象中的一种类型,它也有对象、属性、方法等所以它非常方便定义,枚举类型将它的对象(实例)设置为常量方便读取和使用。
枚举类型定义格式如下:
//定义枚举类要用关键字enum
public enum 枚举类名{
枚举项1,枚举项2,枚举项3...;
构造方法
成员变量
成员方法
}
定义枚举类型
枚举类型也可以有成员方法、成员变量
每一枚举类型继承java.lang.Enum,所以枚举类不能再继承其它类型。
枚举项就是枚举类型的对象(实例),一般使用大写字母,一个枚举项表示一个常量项,多个枚举项中间逗号分隔。
枚举类型的构造方法使用private私有。
通过“枚举类名.枚举项名称”去访问指定的枚举项。
枚举类实现接口
枚举类型虽然不能继承其它类型但它可以实现一个或多个接口,这个在生产使用中较多。
1、接口
public interface systemcode {
//系统代码
int getcode();
//代码对应的描述
string getDesc();
}
public enum CodeEnum implements SystemCode {
public int getCode() {
return 0;
}
public String getDesc() {
return null;}
public static Pay getPay (String payType) {
//支付对象
Pay pay = null;
switch(payType) {
case weixinpayType:
//构造一个微信支付对象
System. out. println("构造一个微信支付对象");break ;
case aliPayType:
System. out.println("构造一个支付宝支付对象");break ;
default:
break ;
}
return pay ;
public static void main (String[] args) {
PbPayFactory. getPay("weixin") ;
以上使用常量来表示支付方式相关的数据存在以下问题:
1、代码不够简洁
PbPayFactory类中光常量的配置都占据了近一半的代码量,不方便类阅读。
2、不能很好的对数据进行分类
支付类型和支付接口地址靠人工通过命名关联在一起容易出错,常量越多越不方便管理。
对于大型项目的开发类似的配置有很多,如果有一种简洁、分类配置常量的方式将会大大提高我们的生产效率。
枚举类型介绍
java中对常量数据的配置可以使用枚举类型实现,枚举类型是面向对象中的一种类型,它也有对象、属性、方法等所以它非常方便定义,枚举类型将它的对象(实例)设置为常量方便读取和使用。
枚举类型定义格式如下:
//定义枚举类要用关键字enum
public enum 枚举类名 {
枚举项1,枚举项2,枚举项3..;
构造方法
成员变量
成员方法
}
定义枚举类型
枚举类型也可以有成员方法、成员变量,下边将攀博课堂支付类型等常量项用枚举类型定义:
public enum payEnum {
WEIXINPAY("weixin","https://api.mch.weixin.qq.com/pay/"),
ALIPAY("ali","https://openapi.alipay.com/"),
UNIONPAY("union","https://gateway.95516.com/gateway/api/");
// 定义成员变量
//支付名称
说明如下:
1、每个枚举类型继承java.lang.Enum,所以枚举类不能再继承其它类型。
2、枚举项就是枚举类型的对象(实例),一般使用大写字母,一个枚举项表示一个常量项,多个枚举项中间用逗号分隔。
3、枚举类型的构造方法使用private私有。
4、通过"枚举类名.枚举项名称"去访问指定的枚举项。
枚举的优点:
1)增强代码可读性
2)传递参数错误
3)去除equals两者判断 由于常量值地址唯一,使用枚举可以直接通过“==”进行两个值之间的对比,性能会有所提高。
4)编译优势(与常量类相比)
常量类编译时,常量被直接编译进二进制代码中,常量值在升级中变化后,需要重新编译引用常量的类,因为二进制代码中存放的是旧值。枚举类编译时,没有把常量值编译到代码中,即使常量值发生改变,也不会影响引用常量的类。
5)修改优势(与常量类相比)
枚举类编译后默认final class,不允许继承可防止被子类修改。常量类可被继承修改、增加字段等,易导致父类不兼容。