【问题标题】:Method for returning previous enum value in JavaJava中返回前一个枚举值的方法
【发布时间】:2016-03-22 15:42:06
【问题描述】:

我有以下枚举:

enum Rank{TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN,
          KING, ACE}

我正在寻找创建两种方法。一个返回前一个值的值。例如,如果在 FOUR 上调用该方法,则返回 THREE。另一个返回整数值。例如,TWO 返回 2,JACK、QUEEN 和 KING 返回 10,ACE 返回 11。

提前致谢

【问题讨论】:

    标签: java enums


    【解决方案1】:

    第一个问题可以通过在Rank 枚举中添加方法(如我进一步列表中的getValue)来解决。它不是唯一的解决方案——例如,也可以使用静态工厂方法。

    对于第二个问题,您应该引入接受int 值的Rank 枚举新构造函数,然后在枚举实例声明中使用此构造函数。

    现在让我们将这两个更改与您的原始枚举结合起来:

    enum Rank {
        TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7),
        EIGHT(8), NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);
    
        private int value;
    
        //private constructor which accepts int value for each card.
        //It means that ACE(11) call creates ACE instance which holds value of 11 inside 
        Rank(int i) {
            value = i;
        }
    
        public int getValue() {
           return value;
        }
    
        public Rank getPrevRank(){
            return values()[ordinal() > 0 ? ordinal()  - 1 : 0];
        } 
    }
    

    现在你可以写了:

    System.out.println(Rank.FIVE.getPrevRank());//prints FOUR
    System.out.println(Rank.ACE.getValue());//prints 11
    System.out.println(Rank.FIVE.getPrevRank().getValue());//prints 4
    

    PS:对于您的第一个问题,您也可以使用此 util 方法,而无需对 Rank 枚举本身进行任何更改:

    public static Rank getPreviousRank(Rank currentRank){
        return Rank.values()[currentRank.ordinal() > 0 ? currentRank.ordinal()  - 1 : 0];
    }
    

    例子:

    System.out.println(getPreviousRank(Rank.FIVE)); //prints FOUR
    

    【讨论】:

    • 嗨,有没有办法在枚举中执行 getPrevious 方法?顺便说一句,这真的很有帮助。谢谢!!
    • 当然可以,我的朋友。见固定答案=)
    • 静态实用程序方法不是解决任何问题的好方法;它们只会增加您的系统的复杂性并使其更难以测试。将方法添加到枚举的解决方案本身就很好。
    • 你是绝对正确的,多勒里。静态实用程序方法是一种绝对的反模式,但可以帮助处理一些无法更改的遗留代码(例如)。这就是我在答案中添加此选项的原因:)
    猜你喜欢
    • 2013-09-23
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多