Java 枚举获取下一个next

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
转载请注明出处:码谱记录 » Java 枚举获取下一个next
标签: