手动实现枚举类
枚举类的本质就是提供有限个实例,我们自己不能随便new对象,那么我们先按照如下步骤自己手动实现一下代表季节的枚举类,提供春、夏、秋、冬4个实例:
- 定义MyEnumation类,私有化构造函数
- 声明季节名称、季节描述2个成员变量,生成相应的构造方法和set/get方法
- 声明4个静态的MyEnumation类型的常量分别代表春、夏、秋、冬,并初始化
public class MyEnumation {
//初始化常量实例
public static final MyEnumation Spring = new MyEnumation("春天","春暖花开");
public static final MyEnumation Summer = new MyEnumation("夏天","炎炎夏日");
public static final MyEnumation Autumn = new MyEnumation("秋天","秋高气爽");
public static final MyEnumation Winter = new MyEnumation("冬天","冰天雪地");
private String name;//季节名称
private String desc;//季节描述
//私有化构造函数
private MyEnumation(){}
private MyEnumation(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
测试使用代码如下:
System.out.println("测试自己手工实现的枚举类");
MyEnumation spring = MyEnumation.Spring;
MyEnumation summer = MyEnumation.Summer;
MyEnumation autumn = MyEnumation.Autumn;
MyEnumation winter = MyEnumation.Winter;
System.out.println(spring.getName() + ":" + spring.getDesc());
System.out.println(summer.getName() + ":" + summer.getDesc());
System.out.println(autumn.getName() + ":" + autumn.getDesc());
System.out.println(winter.getName() + ":" + winter.getDesc());
利用系统的enum实现枚举类
接下来再用系统的enum同样来实现下春夏秋冬的枚举类:
- 利用enum关键字定义Enumation类
- 声明季节名称、季节描述2个成员变量,生成相应的构造方法和set/get方法
- 声明4实例分别代表春、夏、秋、冬,并初始化
//利用enum关键字定义枚举类
public enum Enumation {
//初始化实例
Spring("春天1","春暖花开1"),
Summer("夏天1","炎炎夏日1"),
Autumn("秋天1","秋高气爽1"),
Winter("冬天1","冰天雪地1");
//声明属性
private String name;
private String desc;
//根据属性定义构造方法
Enumation(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
应该能发现,其实利用系统enum定义的枚举,思路和步骤和我们自己手动实现差不多,只是写法上有稍许区别,显得更加简洁:
- 构造方法已默认私有化,故方法名前面不需要加private修饰符
- 无需再定义静态常量并new对象,只需以实例名称1(参数列表),实例名称2(参数列表)…实例名称n(参数列表);的形式提供所有的枚举实例,这样就会自动调用相应的构造函数生成实例
测试使用代码如下:
System.out.println("测试系统enum实现的枚举类");
Enumation spring1 = Enumation.Spring;
Enumation summer1 = Enumation.Summer;
Enumation autumn1 = Enumation.Autumn;
Enumation winter1 = Enumation.Winter;
System.out.println(spring1.name() + "-" + spring1.ordinal() + "-" + spring1.getName() + "-" + spring1.getDesc());
System.out.println(summer1.name() + "-" + summer1.ordinal() + "-" + summer1.getName() + "-" + summer1.getDesc());
System.out.println(autumn1.name() + "-" + autumn1.ordinal() + "-" + autumn1.getName() + "-" + autumn1.getDesc());
System.out.println(winter1.name() + "-" + winter1.ordinal() + "-" + winter1.getName() + "-" + winter1.getDesc());
输出结果:
另外系统enum还提供了==values()==方法,用于遍历所有枚举的实例:
System.out.println("测试系统enum的方法");
Enumation[] values = Enumation.values();
for (Enumation value : values) {
System.out.println(value.getName() + ":" + value.getDesc());
}
输出结果:
完整代码地址:https://github.com/baobao555/JavaFoundation/tree/master/JavaSE/src/baobao/enumation
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/2676.html