枚举类如何使用

1.如何自定义枚举类
类的对象只有有限个,确定的
当需要定义一组常量时,强烈建议使用枚举
如果枚举类中只有一个对象,则可以作为单例模式的实现方式

例如:星期:星期一、星期二、星期三、星期四、星期五、星期六、星期天性别:男、女

自定义枚举类方式一:
jdk5.0之前,自定义枚举类

package com.carl.javaadvanced.enumtest;

//jdk5.0之前定义枚举类的方式
public class EnumTest {
    //1.private final修饰属性
    private final String WEEKDAY;
    private final String PLAN;
    //2.私有化构造器
    private EnumTest(String WEEKDAY,String PLAN){
        this.WEEKDAY=WEEKDAY;
        this.PLAN=PLAN;
    }
    //3.类内部创建对象Monday Tuesday Wednesday Thursday Friday Saturday Sunday
    public static final EnumTest MONDAY=new EnumTest("星期一","Java常用类--String");
    public static final EnumTest TUESDAY=new EnumTest("星期二","Java常用类--StringBuffer");
    public static final EnumTest WEDNESDAY=new EnumTest("星期三","Java常用类--StringBuilder");
    public static final EnumTest THURSDAY=new EnumTest("星期四","Java常用类--Date");
    public static final EnumTest FRIDAY=new EnumTest("星期五","Java常用类--System");
    public static final EnumTest SATURDAY=new EnumTest("星期六","Java常用类--枚举");
    public static final EnumTest SUNDAY=new EnumTest("星期天","Java常用类--注解");
    //4.其他需求:获取属性值
    public String getWEEKDAY(){
        return this.WEEKDAY;
    }

    public String getPLAN() {
        return this.PLAN;
    }
    @Override
    public String toString(){
        return WEEKDAY+":"+PLAN;
    }
}
class Test{
    public static void main(String[] args) {
        EnumTest friday = EnumTest.FRIDAY;
        System.out.println(friday);
    }
}

方式二:JDK5.0以后,可以使用enum关键字定义枚举类

//jdk5.0以后使用enum关键字定义枚举类--对比5.0以前
enum EnumTest2{
    //1.创建枚举值,枚举值之间用","隔开,最后用";"结束
    MONDAY("星期一","Java常用类--String"),
    TUESDAY("星期二","Java常用类--StringBuffer"),
    WEDNESDAY("星期三","Java常用类--StringBuilder"),
    THURSDAY("星期四","Java常用类--Date"),
    FRIDAY("星期五","Java常用类--System"),
    SATURDAY("星期六","Java常用类--枚举"),
    SUNDAY("星期天","Java常用类--注解");
    //2.private final修饰属性
    private final String WEEKDAY;
    private final String PLAN;
    //3.私有化构造器--可以省略private
    EnumTest2(String WEEKDAY,String PLAN){
        this.WEEKDAY=WEEKDAY;
        this.PLAN=PLAN;
    }
    //4.其他需求:获取属性值
    public String getWEEKDAY(){
        return this.WEEKDAY;
    }

    public String getPLAN() {
        return this.PLAN;
    }
    //Enum抽象类中重写的toString方法返回的是枚举值的name
    @Override
    public String toString(){
        return WEEKDAY+":"+PLAN;
    }
}

总结:jdk5.0以前成员属性必须声明为private final构造器必须声明为私有构造器private由于私有化构造器,必须在类内部创建枚举对象,必须修饰为public static final扩展方法根据需求可以写,调用方式:类名.枚举name.方法名()jdk5.0以后枚举值必须声明在第一行;默认为private static final(不能再写)成员属性必须声明为private final构造器私有化,可不写private扩展方法根据需求可以写,调用方式:类名.枚举name.方法名()toString()方法被Enum抽象类重写了,返回值是枚举值的name–根据需要可以重写enum关键字创建枚举类,获取枚举值的遍历方式: 方式1:遍历:类名.class.getEnumConstants() 方式2:遍历:类名.values()

class Test{
    public static void main(String[] args) {
        //jdk5.0以前自定义枚举类的调用方式
        EnumTest friday = EnumTest.FRIDAY;
        String plan = friday.getPLAN();
        String weekday = friday.getWEEKDAY();
        System.out.println(friday);
        System.out.println("*********************");
        //jdk5.0以后使用enum关键字自定义枚举类的调用方式
        EnumTest2 friday2 = EnumTest2.FRIDAY;
        String plan2 = friday2.getPLAN();
        String weekday2 = friday2.getWEEKDAY();
        System.out.println(friday);
        //enum自定义枚举类的两种遍历方式
        for (EnumTest2 enumConstant : EnumTest2.class.getEnumConstants()) {
            System.out.println(enumConstant);
        }
        for (EnumTest2 value : EnumTest2.values()) {
            System.out.println(value);
        }
    }
}

2.Enum类的主要方法
valueOf()
toString()
values()
3.实现接口的枚举类枚举类实现接口有两种方式:方式一:implements 接口,重写该方法—与接口实现类一样

enum EnumTest2 implements info{
    //1.创建枚举值,枚举值之间用","隔开,最后用";"结束
    MONDAY("星期一","Java常用类--String"),
    TUESDAY("星期二","Java常用类--StringBuffer"),
    WEDNESDAY("星期三","Java常用类--StringBuilder"),
    THURSDAY("星期四","Java常用类--Date"),
    FRIDAY("星期五","Java常用类--System"),
    SATURDAY("星期六","Java常用类--枚举"),
    SUNDAY("星期天","Java常用类--注解");
    //2.private final修饰属性
    private final String WEEKDAY;
    private final String PLAN;
    //3.私有化构造器--可以省略private
    EnumTest2(String WEEKDAY,String PLAN){
        this.WEEKDAY=WEEKDAY;
        this.PLAN=PLAN;
    }
    //4.其他需求:获取属性值
    public String getWEEKDAY(){
        return this.WEEKDAY;
    }

    public String getPLAN() {
        return this.PLAN;
    }
    //Enum抽象类中重写的toString方法返回的是枚举值的name
    @Override
    public String toString(){
        return WEEKDAY+":"+PLAN;
    }

    @Override
    public void show() {
        
    }
}

方式二:implements 接口,可以在枚举值的末尾加上{}重写接口中的方法,每个枚举值都有自己的重写方法可以通过EnumTest2.MONDAY.show()执行MONDAY中重写show的内容

enum EnumTest2 implements info{
    //1.创建枚举值,枚举值之间用","隔开,最后用";"结束
    MONDAY("星期一","Java常用类--String"){
        @Override
        public void show() {
            System.out.println("String类具有不可变性,修改的值会在字符串常量池中重新创建一块区域存放");
        }
    },
    TUESDAY("星期二","Java常用类--StringBuffer"){
        @Override
        public void show() {
            System.out.println("StringBuffer是线程安全的,可变字符序列");
        }
    },
    WEDNESDAY("星期三","Java常用类--StringBuilder"){
        @Override
        public void show() {
            System.out.println("StringBuilder是非线程安全的,可变字符序列");
        }
    },
    THURSDAY("星期四","Java常用类--Date"){
        @Override
        public void show() {
            System.out.println("Date类方法是重点,需要对时间格式进行频繁的处理");
        }
    },
    FRIDAY("星期五","Java常用类--System"){
        @Override
        public void show() {
            System.out.println("这个我没看,完蛋");
        }
    },
    SATURDAY("星期六","Java常用类--枚举"){
        @Override
        public void show() {
            System.out.println("枚举在JDK5.0以前不支持enum关键字,需要自定义,在JDK5.0以后可以使用enum创建枚举类,枚举类可以实现接口并重写");
        }
    },
    SUNDAY("星期天","Java常用类--注解"){
        @Override
        public void show() {
            System.out.println("还没到星期天呢");
        }
    };
    //2.private final修饰属性
    private final String WEEKDAY;
    private final String PLAN;
    //3.私有化构造器--可以省略private
    EnumTest2(String WEEKDAY,String PLAN){
        this.WEEKDAY=WEEKDAY;
        this.PLAN=PLAN;
    }
    //4.其他需求:获取属性值
    public String getWEEKDAY(){
        return this.WEEKDAY;
    }

    public String getPLAN() {
        return this.PLAN;
    }
    //Enum抽象类中重写的toString方法返回的是枚举值的name
    @Override
    public String toString(){
        return WEEKDAY+":"+PLAN;
    }

}

结语
枚举常用于定义一组常量,很多参数化的内容不想存在数据库,那么不二之选自然就是枚举。

在 Qt 中,可以方便地将枚举类(enum class)作为方法参数传递。这种方式不仅有助于提高代码的可读性和安全性,还能够更好地组织相关的常量值。接下来我们将详细介绍如何定义和使用枚举类作为函数参数。 ### 定义枚举类 首先,在 C++11 及以上版本中推荐使用 `enum class` 来代替传统的 `enum` 关键字创建新的枚举类型。这样做是为了避免命名冲突并且提供更强的作用域限制。例如: ```cpp // 在头文件 (.h) 中声明一个名为 OperationMode 的枚举类 class MyClass { public: enum class OperationMode { Normal, Debug }; private slots: void setOperationMode(OperationMode mode); }; ``` 这里的 `MyClass::OperationMode` 就是一个作用域限定的枚举类型,其成员需要显式指明所属范围才能访问到。 ### 作为方法参数 当你想让某个方法接受特定型的枚举值时,可以直接将其设置为该枚举类的对象即可。比如上面的例子中我们有一个私有的槽函数 `setOperationMode()`,它可以接收来自用户界面或者其他部分传入的操作模式信息: ```cpp void MyClass::setOperationMode(MyClass::OperationMode mode){ if(mode == MyClass::OperationMode::Debug){ qDebug()<<"现在处于调试模式"; } else { qDebug()<<"正常运行模式"; } } ``` 在这个实现里,我们检查了传进来的是哪种状态,并据此执行相应的动作。 此外,当从外部调用此方法时也需要指定正确枚举值形式,像这样: ```cpp myObject->setOperationMode(MyClass::OperationMode::Normal); // 或者 myObject->setOperationMode(MyClass::OperationMode::Debug); ``` 这种方法使得 API 更加清晰易懂,同时也减少了错误输入的可能性,因为编译器会强制要求你只能传递有效的枚举值给目标方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值