声明枚举
声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。枚举声明的语法如下:
enum-modifiers enum enumname:enum-base { enum-body, }
其中,enum-modifiers 表示枚举的修饰符主要包括 public、private 和 internal;enumname 表示声明的枚举名称;enum-base 表示基础类型;enum-body 表示枚举的成员,它是枚举类型的命名常数。
任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。
提示:如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。
下面的示例创建一个包含 3 个成员的枚举类型 Signal,然后调用 values() 方法输出这些成员。
public enum Signal {
GREEN,YELLOW,RED;
}
public static void main(String[] args) {
for(int i=0;i<Signal.values().length;i++)
{
System.out.println("枚举成员:"+Signal.values()[i]);
}
}
枚举成员:GREEN
枚举成员:YELLOW
枚举成员:RED
为枚举添加方法
Java 为枚举类型提供了一些内置的方法,同时枚举常量也可以有自己的方法。此时要注意必须在枚举实例的最后一个成员后添加分号,而且必须先定义枚举实例。
下面的代码创建了一个枚举类型 WeekDay,而且在该类型中添加了自定义的方法。
enum WeekDay {
Mon("Monday"),Tue("Tuesday"),Wed("Wednesday"),Thu("Thursday"),Fri("Friday"),Sat("Saturday"),Sun("Sunday");
private final String monday;
WeekDay(String monday) {
this.monday=monday;
}
public static void printDay(int i)
{
switch(i)
{
case 1:
System.out.println(WeekDay.Mon);
break;
case 2:
System.out.println(WeekDay.Tue);
break;
case 3:
System.out.println(WeekDay.Wed);
break;
case 4:
System.out.println(WeekDay.Thu);
break;
case 5:
System.out.println(WeekDay.Fri);
break;
case 6:
System.out.println(WeekDay.Sat);
break;
case 7:
System.out.println(WeekDay.Sun);
break;
default:
System.out.println("wrong number!");
}
}
public String getMonday() {
return monday;
}
}
public static void main(String[] args) {
for(WeekDay day:WeekDay.values())
{
System.out.println(day+"====>"+day.getMonday());
}
WeekDay.printDay(5);
}
Mon====>Monday
Tue====>Tuesday
Wed====>Wednesday
Thu====>Thursday
Fri====>Friday
Sat====>Saturday
Sun====>Sunday
Fri
Java 中的 enum 还可以跟 Class 类一样覆盖基类的方法。下面示例代码创建的 Color 枚举类型覆盖了 toString() 方法。
public class TestColor {
enum Color{
RED("红色",1),GREEN("绿色",2),WGITE("白色",3),YELLOW("黄色",4);
private String name;
private int index;
Color(String name, int index) {
this.index=index;
this.name=name;
}
@Override
public String toString() {
return "Color{" +
"name='" + name + '\'' +
", index=" + index +
'}';
}
}
public static void main(String[] args) {
System.out.println(Color.RED.toString()); //输出:1-红色
}
}
Color{name='红色', index=1}
综合应用:
/**
* 账单类型-枚举
*/
public enum BillsTypeEnums {
/**一般*/
YB("0", "一般",R.drawable.type_big_1,"1"),
/**用餐*/
YC("1", "用餐",R.drawable.type_big_2,"1"),
/**零食*/
LS("2", "零食",R.drawable.type_big_3,"1"),
/**交通*/
JT("3", "交通",R.drawable.type_big_4,"1"),
/**充值*/
CZ("4", "充值",R.drawable.type_big_5,"1"),
/**购物*/
GW("5", "购物",R.drawable.type_big_6,"1"),
/**娱乐*/
YL("6", "娱乐",R.drawable.type_big_7,"1"),
/**住房*/
ZF("7", "住房",R.drawable.type_big_8,"1"),
/**约会*/
YH("8", "约会",R.drawable.type_big_9,"1"),
/**网购*/
WG("9", "网购",R.drawable.type_big_10,"1"),
/**日用品*/
RYP("10", "日用品",R.drawable.type_big_11,"1"),
/**香烟*/
XY("11", "香烟",R.drawable.type_big_12,"1"),
/**工资*/
GZ("12", "工资",R.drawable.type_big_13,"0"),
/**外快兼职*/
WKJZ("13", "外快兼职",R.drawable.type_big_14,"0"),
/**奖金*/
JJ("14", "奖金",R.drawable.type_big_15,"0"),
/**借入*/
JR("15", "借入",R.drawable.type_big_16,"0"),
/**零零花钱*/
LHQ("16", "零花钱",R.drawable.type_big_17,"0"),
/**投资收入*/
TZSR("17", "投资收入",R.drawable.type_big_18,"0"),
/**礼物红包*/
LWHB("18", "礼物红包",R.drawable.type_big_19,"0")
;
/**
*
* @param code 编号
* @param name 名称
* @param imageID 资源图片id
*/
private BillsTypeEnums(String code, String name,int imageID,String state){
this.code = code;
this.name = name;
this.imageID=imageID;
this.state=state;
}
/**
* 通过文字名称获取编码
* @param name
* @return
*/
public static String getCodeByName(String name){
String code = "";
for (BillsTypeEnums ele : values()) {
if (ele.getName().equals(name)) {
code = ele.getCode();
break;
}
}
return code;
}
/**
* 获取枚举名称
* @param code
* @return
*/
public static String getEnumByCode(String code){
String enumName = "";
for (BillsTypeEnums ele : values()) {
if (ele.getCode().equals(code)) {
enumName = ele.name();
break;
}
}
return enumName;
}
/**
* 获取name描述
* @param code
* @return
*/
public static String getNameByCode(String code){
String name = "";
for (BillsTypeEnums ele : values()) {
if (ele.getCode().equals(code)) {
name = ele.getName();
break;
}
}
return name;
}
/**
* 获取类别
* @param enumName
* @return
*/
public static String getTypeByEnumName(String enumName){
String code = "";
for (BillsTypeEnums ele : values()) {
if (ele.name().equals(enumName)) {
code = ele.getCode();
break;
}
}
if ("".equals(code)){
code = enumName;
}
return code;
}
/**
* 获取资源id
* @param enumName
* @return
*/
public static int getImageIDByEnumName(String enumName){
int imageID = 0;
for (BillsTypeEnums ele : values()) {
if (ele.getName().equals(enumName)) {
imageID = ele.getImageID();
break;
}
}
return imageID;
}
/**
* 获取所有收入-0,或者支出-1,的名称类别数组
* @param state 收入-0,支出-1
* @return
*/
public static String[] getArrayOfName(String state){
String[] array;
if("0".equals(state)){
array=new String[7];
}else{
array=new String[12];
}
int i=0;
for (BillsTypeEnums ele : values()) {
if (ele.getState().equals(state)) {
array[i] = ele.getName();
i++;
}
}
return array;
}
/**
* 获取所有收入-0,或者支出-1,的图片资源id类别数组
* @param state 收入-0,支出-1
* @return
*/
public static Integer[] getArrayOfImageID(String state){
Integer[] array;
if("0".equals(state)){
array=new Integer[7];
}else{
array=new Integer[12];
}
int i=0;
for (BillsTypeEnums ele : values()) {
if (ele.getState().equals(state)) {
array[i] = ele.getImageID();
i++;
}
}
return array;
}
/** 编码 */
private String code;
/** 名称 */
private String name;
/** 图片资源id */
private int imageID;
/** 账收支类别(0-收入,1-支出) */
private String state;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImageID() {
return imageID;
}
public void setImageID(int imageID) {
this.imageID = imageID;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}