Java第十八次作业

1.1 枚举类型的基本使用
        枚举常量是枚举类型中的值,即枚举值。枚举类型是一种用户定义的类型,只有用户在程序中定义它后才能被使用。用户通常利用枚举类型定义程序中需要使用的一组相关的符号常量。枚举类型的定义格式为:    

enum   <枚举类型名>   {
    <枚举表>
};    


        枚举类型用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。

        枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。


 

public class PbPayFactory {
    //微信支付类型
    public static final String weixinPayType = "weixin";//微信支付接口地址
    public static final String weixinPayurl ="https://api.mch.weixin.qq.com/pay/";
    //支付宝支付类型
    public static final String aliPayType = "ali";
    public static final String aliPayurl ="https://openapi.alipay.com/";
    //银联支付类型
    public static final String unionPayType = "union";
    public static final String unionPayurl ="https://gateway.95516.com/gateway/api/";
    //根据支付类型获取支付服务对象
    public static Pay getPay(String payType){
        Pay pay =null;
        switch(payType){
            case PbPayFactory.weixinPayType:
                //构造微信支付对象... 
                break;
            case PbPayFactory.aliPayType:
                //构造支付宝支付对象... 
                break;
            case PbPayFactory.unionPayType:
                //构造银联支付对象...
                break;
            default:
                break;
        }
        return pay;
    }
}

以上使用常量来表示支付方式相关的数据存在以下问题:

1、代码不够简洁 PbPayFactory类中光常量的配置都占据了近一半的代码量,不方便类阅读。

2、不能很好的对数据进行分类 支付类型和支付接口地址靠人工通过命名关联在一起容易出错,常量越多越不方便管理。 对于大型项目的开发类似的配置有很多,如果有一种简洁、分类配置常量的方式将会大大提高我们的生产效率。

 1.2 枚举类型介绍
        声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。 

       java中对常量数据的配置可以使用枚举类型实现,枚举类型是面向对象中的一种类型,它也有对象、属性、方法等所以它非常方便定义,枚举类型将它的对象(实例)设置为常量方便读取和使用
 

//定义枚举类要用关键字enum
public enum 枚举类名 { 
    枚举项1,枚举项2,枚举项3..;
    构造方法
    成员变量
    成员方法 
}

1.3 定义枚举类型
        枚举是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁,安全性以及便捷性。创建枚举类型要使用enum关键字,隐含了所创建的类型都是java.lang.Enum类的子类(java.lang.Enum是一个抽象类)。枚举类型符合通用模式Class Enum<E extends Enum<E>>,而E表示枚举类型的名称。枚举类型的每一个值都映射到protected Enum(String name,int ordinal)构造函数中,在这里,每个值的名称都转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

         枚举类型也可以有成员方法、成员变量,下边将支付类型等常量项用枚举类型定义:
 

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/");
    // 定义成员变量 
    //支付名称
 
public enum PayEnum {
		    /**
		     * //微信支付类型
		     *     public static final String weixinPayType = "weixin";//微信支付接口地址
		     *     public static final String weixinPayurl ="https://api.mch.weixin.qq.com/pay/";
		     *     //支付宝支付类型
		     *     public static final String aliPayType = "ali";
		     *     public static final String aliPayurl ="https://openapi.alipay.com/";
		     *     //银联支付类型
		     *     public static final String unionPayType = "union";
		     *     public static final String unionPayurl ="https://gateway.95516.com/gateway/api/";
		     */
		    //枚举项,采用全部大写命名
		    //枚举项就是一个一个对象,它是常量,可定义枚举项的时候调用构造方法
		    WEIXINPAY("weixin","https://api.mch.weixin.qq.com/pay/"),
		    ALIPAY("ali","https://openapi.alipay.com/"),
		    UNIONPAY("union","https://gateway.95516.com/gateway/api/");
		    private String name;//支付名称
		    private String payUrl;//支付地址
		    //定义构造方法,枚举类型构造方法是private
		    private PayEnum(){
		    }
		    private PayEnum(String name,String payUrl) {
		        this.name= name;
		        this.payUrl =payUrl;
		    }
		    /**
		    * @return the name
		     */
		    public String getName() {
		        return name;
		    }
		    /**
		    * @param name the name to set
		    */
		    public void setName(String name) {
		        this.name = name;
		    }
		    /**
		    * @return the payUrl
		    */
		    public String getPayUrl() {
	                return payUrl;}
		    /**
		    * @param payUrl the payUrl to set
		    */
		    public void setPayUrl(String payUrl){
		        this.payUrl = payUrl;
		    }
		    public static void main(String[] args) {
		    //枚举项就是一个对象(实例)
		        PayEnum weixinPay=PayEnum.WEIXINPAY;
		        System.out.println(weixinPay.getName());
		        System.out.println(weixinPay.getPayUrl());
		}
}

说明如下:
1、每个枚举类型继承java.langEnum,所以枚举类不能再继承其它类型。
2、枚举项就是枚举类型的对象(实例),一般使用大写字母,一个枚举项表示一个常量项,多个枚举项中间用逗号分隔。
3、枚举类型的构造方法使用private私有。
4、通过"枚举类名,.枚举项名称"去访问指定的枚举项。

1.4枚举类型实现接口
      枚举类型虽然不能继承其它类型但它可以实现一个或多个接口,这个在生产使用中较多。

/**
*系统代码接口
*/ 
interface SystemCode { 
    //系统代码 
    int getcode(); 
    //代码对应的描述 
    String getdesc();
}
 
public enum CodeEnum implements SystemCode {
	    ERROR(-1,"系统异常"),
	    FAILURE(0,"操作失败"),
	    SUCCESSFUL(1,"操作成功"),
	    LOGINSUCCESSFUL(100,"登录成功");
	    private CodeEnum(int code,String desc) {
	        this.code = code;
	        this.desc = desc;
	    }
	    int code;//系统代码
	    String desc;//代码对应的描述
	    @Override
	    public int getcode() {
	        return code;
	    }
	    @Override
	    public String getdesc() {
	        return desc;
	    }
	    public static void main(String[] args) {
	        System.out.println(CodeEnum.SUCCESSFUL.getcode());
	        System.out.println(CodeEnum.SUCCESSFUL.getdesc());
	//枚举项可以向上转型为接口类型
	        SystemCode code=CodeEnum.SUCCESSFUL;
	        System.out.println(code.getcode());
	        System.out.println(code.getdesc());
	    }
	}

1.5枚举优点
1 增强代码可读性

2 传递参数错误

3 去除equals两者判断 由于常量值地址唯一,使用枚举可以直接通过“==”进行两个值之间的对比,性能会有所提高。

4 编译优势(与常量类相比)

常量类编译时,常量被直接编译进二进制代码中,常量值在升级中变化后,需要重新编译引用常量的类,因为二进制代码中存放的是旧值。枚举类编译时,没有把常量值编译到代码中,即使常量值发生改变,也不会影响引用常量的类。

5 修改优势(与常量类相比)

枚举类编译后默认final class,不允许继承可防止被子类修改。常量类可被继承修改、增加字段等,易导致父类不兼容。

6 枚举型可直接与数据库交互。

7 Switch语句优势

使用int、String类型switch时,当出现参数不确定的情况,偶尔会出现越界的现象,这样我们就需要做容错操作(if条件筛选等),使用枚举,编译期间限定类型,不允许发生越界。

枚举类型介绍

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,不允许继承可防止被子类修改。常量类可被继承修改、增加字段等,易导致父类不兼容。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值