Java 中的枚举在项目中十分常用,我们可以用它来处理固定数量的值。
现在有个场景,需要支持 enum 枚举值的上一个 previous,下一个 next。
示例代码
设定枚举为 春夏秋冬 四个枚举值。
public enum SeasonEnum {
/**
* 季节
*/
SPRING("春"), SUMMER("夏"), AUTUMN("秋"), WINTER("冬");
SeasonEnum(String name) {
this.name = name;
}
private String name;
private static final SeasonEnum[] vals = values();
/**
* 前一个、上一个
*/
public SeasonEnum prev(){
return vals[(this.ordinal() - 1 + vals.length) % vals.length];
}
/**
* 后一个、下一个
*/
public SeasonEnum next(){
return vals[(this.ordinal() + 1) % vals.length];
}
}
核心代码:
private static final SeasonEnum[] vals = values();
/**
* 前一个、上一个
*/
public SeasonEnum prev(){
return vals[(this.ordinal() - 1 + vals.length) % vals.length];
}
/**
* 后一个、下一个
*/
public SeasonEnum next(){
return vals[(this.ordinal() + 1) % vals.length];
}
为了提高效率,我们将所有的枚举值放到了类变量 vals 中。这里的取余操作 % 可以防止数组下标越界。
代码测试
public static void main(String[] args) {
System.out.println("SPRING 下一个 " + SeasonEnum.SPRING.next());
System.out.println("WINTER 下一个 " + SeasonEnum.WINTER.next());
System.out.println("SPRING 上一个 " + SeasonEnum.SPRING.prev());
System.out.println("WINTER 上一个 " + SeasonEnum.WINTER.prev());
}
SPRING 下一个 SUMMER
WINTER 下一个 SPRING
SPRING 上一个 WINTER
WINTER 上一个 AUTUMN
WINTER 下一个 SPRING
SPRING 上一个 WINTER
WINTER 上一个 AUTUMN