什么是枚举

什么是枚举

简单来说,枚举就是一个类有有限个确定的对象。

有限个”就不用解释了,如果说枚举有无限个对象,那它和普通的类又有什么区别呢?

确定的”就是指枚举类的所有对象都是不可变的。

这里我给个例子解释一下:

public class Season {
    private String name;
    private String idiom; //成语

    private Season(String name, String idiom) {
        this.name = name;
        this.idiom = idiom;
    }

    private static final Season spring = new Season("Spring", "春暖花开");
    private static final Season summer = new Season("Summer", "烈日炎炎");
    private static final Season autumn = new Season("Autumn", "秋高气爽");
    private static final Season winter = new Season("Winter", "寒风凛冽");

    public String getName() {
        return name;
    }

    public String getIdiom() {
        return idiom;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", idiom='" + idiom + '\'' +
                '}';
    }
}

首先构造方法是私有化的,所以Season类只有四个对象。

使用了“private static final”修饰这四个对象,所以可以通过类名来找到对象,并且对象是不可变的。

属性也是私有话的,所以即使得到对象,也不能改变它的属性。

最后就是提供一些方法来获取对象的属性。

为什么要使用final呢

这里要明确的是final修饰的是对象名,虽然对象的属性是不可变的,但是对象名的引用是可以变的。比如说如果没有用final修饰的话:

Season.spring = Season.summer;

System.out.println(Season.spring.getName);

返回值是Summer。

JDK1.5之后

随着枚举越来越广泛的应用,JDK1.5之后出现了关键词enum来专门创建枚举类。

public enum Season {
    spring("Spring", "春暖花开"),
    summer("Summer", "烈日炎炎"),
    autumn("Autumn", "秋高气爽"),
    winter("Winter", "寒风凛冽");
    
    private String name;
    private String idiom; //成语

    private Season(String name, String idiom) {
        this.name = name;
        this.idiom = idiom;
    }

    public String getName() {
        return name;
    }

    public String getIdiom() {
        return idiom;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", idiom='" + idiom + '\'' +
                '}';
    }
}

使用enum来创建枚举类有一些额外的要求:

首先所有的对象都必须放在最前面。

其次:

private static final Season spring = new Season("Spring", "春暖花开");

创建对象时“private static final Season”和”new Season“都是重复的,所以没有写的必要,简化为

spring("Spring", "春暖花开"),

需要注意的是对象之间用逗号链接,最后用分号和其他语句隔开。


如果枚举类的底层没有任何属性,那么它就会变得非常简洁:

public enum Season {
    SPRING,
    SUMMER,
    AUTUMN,
    WINTER;
}

note:

enum定义的枚举类上层父类是java.lang.Enum,而自定义的枚举类上层父类是Object。

Enum类常用的方法:

(还是以上面的例子为例)

  1. SPRING.toString()返回对象的名称
  2. Season.values()返回对象数组
  3. Season.valueOf(“SPRING”)返回特定对象(要求以对象名为参数)

Enum类实现接口:

情况1:所有对象对接口方法的实现相同

public enum Season {
    SPRING,
    SUMMER,
    AUTUMN,
    WINTER;
    
    //在这里实现接口方法
}

情况2:对象对接口方法的实现不同

public enum Season {
    SPRING(//在这里实现接口方法
    ),
    SUMMER(//在这里实现接口方法
    ),
    AUTUMN(//在这里实现接口方法
    ),
    WINTER(//在这里实现接口方法
    );
}
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值