Java-枚举类型

多例设计模式

设计一个Java类,这个Java类只可以实例化出固定的几个对象。这种设计就称为多例设计模式。
例如,一个表示性别的类Sex,只有可能实例化两个对象,一个表示“男”一个表示“女”:

public class Sex {
    public static final Sex man = new Sex("男");
    public static final Sex women = new Sex("女");
    
    private String name;
    private Sex(String name){
        this.name=name;
    }
    @Override
    public String toString(){
        return this.name;
    }
}

多例设计模式有以下几个要点:

  • 构造方法私有
  • 在类的内部用静态常量实例化一个本类

枚举

枚举是简化的多例设计模式。用enum关键字可以轻松实现这样一个类

public enum  SexEnum {
    MAN,WOMAN;
}

使用枚举

public static void main(String[] args) {
    System.out.println(SexEnum.MAN);//MAN
    System.out.println(SexEnum.WOMAN);//WOMAN
    
    for(SexEnum sex:SexEnum.values()){
        System.out.println(sex.name());
        System.out.println(sex.ordinal());
    }
}

定义其他结构

枚举的本质是多例设计模式,枚举内部自然也可以定义其他的结构

public enum  SexEnum {
    MAN("男"),WOMAN("女");
    
    private String sexName;
    private SexEnum(String sexName){
        this.sexName=sexName;
    }
    @Override
    public String toString(){
        return this.sexName;
    }
}

有两点需要注意:

  • 枚举对象必须写在首行
  • 构造方法私有

枚举实现接口

public interface getSexName {
    String getSexName();
}
public enum  SexEnum implements getSexName{
    MAN("男"),WOMAN("女");

    private String sexName;
    private SexEnum(String sexName){
        this.sexName=sexName;
    }
    @Override
    public String toString(){
        return this.sexName;
    }

    @Override
    public String getSexName() {
        return this.sexName;
    }
}

枚举中的对象MAN和WOMAN就都实现了GetSexName接口。
枚举也可以让其中的对象分别覆写接口:

public enum  SexEnum implements getSexName{
    MAN("男"){
        public String getSexName(){
            return "男";
        }
    },
    WOMAN("女"){
        public String getSexName(){
            return "女";
        }
    };

    private String sexName;
    private SexEnum(String sexName){
        this.sexName=sexName;
    }
    @Override
    public String toString(){
        return this.sexName;
    }
}

在switch语句中使用枚举

public static void main(String[] args) {
    SexEnum e = SexEnum.MAN;
    switch (e){
        case MAN:
            System.out.println("是个男的");
            break;
        case WOMAN:
            System.out.println("是个女的");
            break;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值