在实际项目当中,很多时候需要用到一些静态的变量。我们首先想到的就是使用枚举了,本文介绍一下枚举的常用方式!
第一种经常用到:
1.ANIMAL_CAT(“CAT”,“猫”)相当于EnumAnimal的实例。
2."CAT"为实例的code,"猫"为实例的name。
package enums;
public enum EnumAnimal {
ANIMAL_CAT("CAT","猫"),
ANIMAL_DOG("DOG","狗"),
ANIMAL_PANDA("PANDA","熊猫"),
ANIMAL_TIGER("TIGER","老虎");
private String code;
private String name;
private EnumAnimal(String code, String name) {
this.code = code;
this.name = name;
}
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 static EnumAnimal getEnum(String code){
for(EnumAnimal animal:EnumAnimal.values()){
if(animal.code.equals(code)){
return animal;
}
}
return null;
}
}
测试类
package enums;
public class TestEnum {
public static void main(String[] args) {
//通过enum.values()方法获取所有实例
System.out.println("***********遍历每个实例的Code以及Name**********");
for(EnumAnimal animal:EnumAnimal.values()){
//通过getCode()以及getName获取每一个属性的值
System.out.println(animal.getCode()+";"+animal.getName());
}
//通过getEnum()获取单个实例
System.out.println("***********通过Code获取实例**********");
EnumAnimal enum1 = EnumAnimal.getEnum("DOG");
System.out.println(enum1);
}
}
测试结果
第二种写法,需要在枚举类进行计算
采用的是策略枚举方式实现,通过将策略枚举PayType传给PayrollDay后,PayrollDay根据策略类型执行不同的计算方式。
package enums;
/**
* 计算每个星期哪几天应该正常支付薪水
* @author win 10
*
*/
public enum PayrollDay {
MONDAY(PayType.WEEKDAY),TUESDAY(PayType.WEEKDAY),WEDNESDAY(PayType.WEEKDAY),
THURSDAY(PayType.WEEKDAY),FRIDAY(PayType.WEEKDAY),SATURDAY(PayType.WEEKEND),
SUNDAY(PayType.WEEKEND);
private final PayType payType;
private PayrollDay(PayType payType) {
this.payType = payType;
}
public double pay(double money){
return payType.pay(money);
}
private enum PayType{
WEEKDAY{
@Override
double payMoney(double money){
return money;
}
},
WEEKEND{
@Override
double payMoney(double money){
return money*2;
}
};
abstract double payMoney(double money);
private double pay(double moeny){
return payMoney(moeny);
}
}
public static void main(String[] args) {
double salary = PayrollDay.SUNDAY.pay(200);
System.out.println(salary);
}
}
测试结果