栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java第十八次作业(半小时搞懂枚举类型)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java第十八次作业(半小时搞懂枚举类型)

使用枚举类型 枚举类型的基本使用常量项需求


在系统中有一些变量它具有固定的取值范围,比如∶学生类的性别属性包括男、女两个值、攀博课堂支付方式包括微信支付、支付宝支付、银联支付三种方式等,在程序中对这些取值通常用常量来表示,因为它们是固定在一定范围内的,如下代码是攀博课堂支付类中支付方式的的表示方式:
定义枚举类型
枚举类型也可以有成员方法、成员变量,下边将支付类型等常量项用枚举类型定义
 

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 aliPayType = "ali";//支付宝支付对象
public static final String unionType = "union" ;//银联支付对象
//枚举项,采用全部大写命名

WEIXINPA Y,
ALIPAY,
UNIOnPAY;


 

//枚举项,采用全部大写命名
枚举项就是一个一个对象,它是常量,可定义枚举项的时候调用构造方法WEIXINPAY("weixin","https://api.mch.weixin.qq.com/ pay/"),
ALIPAY("ali","https:/(openapi.alipay.com/"),
UNIOnPAY("union", "https:/lgateway.95516.com/ gateway/api/");
private String name;//支付名称
private String payUrl;//支付地址
/定义构造方法,枚举类型构造方法是privateprivate PayEnum() {

}
private PayEnum (String name, String payUrl) {
this.name= name ;
this.payUrl = payUrl ;
}
pub11c Str1ng getName() 1
return name;

public void setName(String name) {
this.name = name ;
}

public String getPayUrl(){
return payUrl;

public void setPayUrl(String payUrl) {
this.payUrl = payUrl ;
}
 
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;
    }
}

 

 如何调用

public static void main(String[] args) {
System.out.println(PayEnum.WEIXINPAY.getName());
}

输出结果

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

1、接口

 

public 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;//代码对应的描述
    public int getcode() {
        return code;
    }
    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());
}
}
public enum CodeEnum implements SystemCode {
public int getCode() {
return 0;
}

public String getDesc() {
return null;}

 

调用枚举 例子

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());
}

 因为枚举是常量所以他们比较是用==号比较

public static void main(String[] args) {
//枚举项就是一个对象(实例)
PayEnum weixinPay = PayEnum.WEIXINPAY;

System. out. println(weixinPay.getName() ;

System. out. println(weixinPay.getPayUr1)) ;//枚举项之间如何比较呢?
PayEnum aliPay = PayEnum.ALIPAY;
System. out. println(aliPay == PayEnum.ALIPAY) ;

输出

 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") ;

 因为用枚举所以case后面接枚举对象

 传入一个参数,看结果

 

以上使用常量来表示支付方式相关的数据存在以下问题:
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,不允许继承可防止被子类修改。常量类可被继承修改、增加字段等,易导致父类不兼容。
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926986.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号