什么是枚举
简单来说,枚举就是一个类有有限个确定的对象。
“有限个”就不用解释了,如果说枚举有无限个对象,那它和普通的类又有什么区别呢?
“确定的”就是指枚举类的所有对象都是不可变的。
这里我给个例子解释一下:
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类常用的方法:
(还是以上面的例子为例)
- SPRING.toString()返回对象的名称
- Season.values()返回对象数组
- Season.valueOf(“SPRING”)返回特定对象(要求以对象名为参数)
Enum类实现接口:
情况1:所有对象对接口方法的实现相同
public enum Season {
SPRING,
SUMMER,
AUTUMN,
WINTER;
}
情况2:对象对接口方法的实现不同
public enum Season {
SPRING(
),
SUMMER(
),
AUTUMN(
),
WINTER(
);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)