Java高级特性之枚举
Posted mfmdaoyou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java高级特性之枚举相关的知识,希望对你有一定的参考价值。
在Java SE5之前,我们要使用枚举类型时,一般会使用static final 定义一组int常量来标识。代码例如以下
public static final int MAN = 0;
public static final int WOMAN = 1;
相信非常多小伙伴,在实际开发中也是那么干的。既然这样已经能实现枚举的功能,为什么还要引入枚举呢?我们接着往下看当我们须要是同这组“int枚举”是代码例如以下
public void showSex(int sex){
switch(sex){
case MAN:
System.out.println("this is a boy");
break;
case WOMAN:
System.out.println("this is a Girl");
break;
}
}
看起来这些貌似也没什么问题,可是我们知道,一个项目基本都是基于团队开发。也许仅仅有你自己知道int类型的1代表gril,0代表Boy。
其它同事看到这个函数根本不知道当中的含义。这种代码非常明显阅读性非常差。从而会造成沟通成本非常高。
我们接着往下看。如今你为你的func写了非常nice的凝视,傻子都能看得懂(0 boy,1 gril)。
可是项目组不可避免的总会出现那么一两个傻子,非要给你传个3进来,并且这种错误编译器不会报不论什么错误,执行时会造成什么bug,这个仅仅有乔老爷知道了。所以这种代码是极不安全的。
使用枚举就能非常好的避免上面的问题,接下来我们就来理一理枚举的使用方法。
枚举用于存储数量有限的一组固定的数据集。
使用场景:上面说到的性别的表示。一年四级春夏秋冬的表示,一周七天的表示,颜色的表示等等。
枚举的简单使用方法
// 普通枚举
public enum ColorEnum {
white, red, green, blue;
}
/**
*
* 枚举中有一个自带的静态方法values(),返回enum实例的数据并且该数组中的元素顺序和声明时的顺序一样
* 枚举也能够像普通的类一样能够加入属性和方法。能够为它加入静态和非静态的属性或方法
*/
public enum SeasonEnum {
//注:枚举写在最前面,否则编译出错
spring, summer, autumn, winter;
private final static String position = "test";
public static SeasonEnum getSeason() {
if ("test".equals(position))
return spring;
else
return winter;
}
}
/**
* 带构造器的枚举
* 必须带有一个參构造器和一个属性跟方法,否则编译出错
*
*/
public enum Mode {
PULLDOWN("下拉"), PULLUP("上拉");
private final String value;
/**
* 构造器默认也仅仅能是private, 从而保证构造函数仅仅能在内部使用
*
*/
private Mode(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
枚举中另一个ordinal()方法返回一个int值,这是每一个enum实例在声明时的次序,从0開始。枚举类还实现了Compareable接口,所以他具有compareTo()方法。
同一时候还实现了Serializable接口。还自己主动为你提供了equals()和hashCode()方法。
除了不能继承一个枚举类之外,我们基本上能够把枚举类当成一个常规的Java类,能够往当中加入新的方法,包含抽象方法甚至main方法。
如今我们用枚举来实现上面的那个性别函数
public enum EnumSex {
MAN, WOMAN
}
public static void showSex(EnumSex EnumSex) {
switch (EnumSex) {
case MAN:
System.out.println("this is a boy");
break;
case WOMAN:
System.out.println("this is a girl");
break;
}
}
public static void main(String[] args) {
showSex(EnumSex.MAN);
// showSex(EnumSex.Renyao) 编译报错
}
这样既有非常好的阅读性又避免的安全性问题
以上是关于Java高级特性之枚举的主要内容,如果未能解决你的问题,请参考以下文章