您的位置:首页 > 编程语言 > Java开发

JAVA学习之枚举

2015-09-22 11:07 507 查看
1、新建一个枚举类

public enum Apple{
FUJI,
PIPPIN,
GRANNY_SMITH
}


通过查看字节码,可以看到,枚举类的实现方式:

1)继承自java.lang.Enum类。

2)构造类为private

3)枚举内的元素通过static域来引用

2、在枚举类中添加任意的方法和域。

public enum Apple {
FUJI("red"),
PIPPIN("green"),
GRANNY_SMITH("orange");

private String color;

Apple(String color) {
this.color = color;
}

  public String getColor() {
  return color;
  }

}


在上面的类中:

1)添加了域color

2)创建了新的构造函数。

3)增加了新的方法。

3、在枚举中声明抽象方法,特定于常量的方法实现。

public enum Operation {

PLUS {
@Override
double apply(double x, double y) {
return x+y;
}
},
MINUS {
@Override
double apply(double x, double y) {
return x-y;
}
},
TIMES {
@Override
double apply(double x, double y) {
return x*y;
}
},
DIVIDE {
@Override
double apply(double x, double y) {
return x/y;
}
};

abstract double apply(double x,double y);
}


针对每个枚举值,分别定义不同的方法实现。

4、策略枚举

public enum PayrollDay {
MONDAY(PayType.WEEDAY),
TUESDAY(PayType.WEEDAY),
WEDNESDAY(PayType.WEEDAY),
THURSDAY(PayType.WEEDAY),
FRIDAY(PayType.WEEDAY),
SATURDAY(PayType.WEEKEND),
SUNDAY(PayType.WEEKEND);

private final PayType payType;

PayrollDay(PayType payType) {
this.payType = payType;
}

double pay(double houresWorked, double payRate){
return payType.pay(houresWorked, payRate);
}

private enum PayType{
WEEDAY {
@Override
double overtimePay(double hrs, double payRate) {
return hrs<=HOURS_PER_SHIFT ? 0 :
(hrs - HOURS_PER_SHIFT) * payRate / 2;
}
},
WEEKEND {
@Override
double overtimePay(double hrs, double payRate) {
return hrs * payRate / 2;
}
};

private static final int HOURS_PER_SHIFT=8;

abstract double overtimePay(double hrs, double payRate);

double pay(double hoursWorked, double payRate){
double basePay = hoursWorked * payRate;
return basePay + overtimePay(hoursWorked,payRate);
}
}

}


针对常量如果可以进行分类,则可以定义一个策略枚举,来减少样板代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: