有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这个枚举是否违反了单一责任原则?

首先,我假设Java枚举应该遵循与常规类相同的实践

我对“单一责任”的含义有点模糊。对于下面的代码,我想知道hasSucceed方法是否违反了规则,因为它的逻辑超出了保持级别的目的

如果它确实违反了原则,我将如何重构

package foo;

public enum Level {
    AWFUL(-4),
    TERRIBLE(-3),
    POOR(-2),
    MEDIOCRE(-1),
    FAIR(0),
    GOOD(1),
    GREAT(2),
    SUPERB(3),
    LEGENDARY(4);   

    private final int level;

    Level(int level) {
        this.level = level;
    }

    public int getValue() {
        return this.level;
    }

    public boolean hasSucceeded(Level requiredLevel, Level roll) {
        return getValue() + roll.getValue() >= requiredLevel.getValue();
    }
}

共 (2) 个答案

  1. # 1 楼答案

    我建议您将已成功的方法的责任交给另一个,您可以向该类要求其他方法

    我更喜欢将枚举与代码或逻辑分开,并将级别enum用作枚举的存储库

  2. # 2 楼答案

    您应该考虑更改的原因:HASSUCCEDED的要求更改的原因是否与级别列表的要求不同?这不能仅基于代码来判断,您需要考虑用例。例如,如果levels enum是用于不同游戏项目的库的一部分,那么如果不同游戏需要不同的成功逻辑,则可能会导致问题

    请注意,另一个原则the principle of information hiding建议此方法应位于此枚举中,因为其参数也是类型级别的

    顺便说一句,将枚举视为类并向其添加方法是完全可以的。这是Java枚举的优点之一