java - 这个 hacky 枚举可以改进吗?

标签 java coding-style

对于基准测试,我需要三种不同的设置(“保留全部”、“保留大小”和“不保留任何内容”),因此我认为可以使用枚举。然后我发现我需要多次运行某些案例(基准测试使用种子随机),而我原来的枚举变得非常不灵活。对于 Caliper ,我需要重复枚举项。经过几次失败的尝试后,我最终得到了这个古怪的想法:

private enum Randomization {
    USE_EXAMPLE_1,
    USE_EXAMPLE_2,
    KEEP_EXAMPLE_SIZE_1,
    RANDOM_1,
    RANDOM_2,
    RANDOM_3,
    ;

    final boolean keepAll;
    final boolean keepSize;

    private Randomization() {
        keepAll = name().startsWith("U");
        keepSize = !name().startsWith("R");
    }
}

它完全符合我的要求,我可以以最小的开销添加或删除实验。有没有更好的解决方案?

最佳答案

Is there any nicer solution?

嗯,并不是很清楚为什么你首先需要这些重复的枚举值 - 我怀疑我有一个枚举,只是包含逻辑值,然后使用填充一个集合相反,重复值。

另一种选择是拥有一个类似于当前枚举的枚举,一个更逻辑的枚举,其中“重复”枚举的构造函数引用“逻辑”枚举的实例相反。

如果您真的非常想保留当前结构,我个人会放弃 keepSizekeepAll 部分的推断,而使用参数化构造函数:

private enum Randomization {
    USE_EXAMPLE_1(true, true),
    USE_EXAMPLE_2(true, true),
    KEEP_EXAMPLE_SIZE_1(false, true),
    RANDOM_1(false, false),
    RANDOM_2(false, false),
    RANDOM_3(false, false),
    ;

    final boolean keepAll;
    final boolean keepSize;

    private Randomization(boolean keepAll, boolean keepSize) {
        this.keepAll = keepAll;
        this.keepSize = keepSize;
    }
}

关于java - 这个 hacky 枚举可以改进吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18301508/

相关文章:

java - 处理枚举的 Java 最佳实践是什么

java - 从通过 servlet 动态上传的 jar 中加载类

Java 方法返回初始化变量,而不是变量的最终值。

coding-style - 在 IF block 中放什么,在 ELSE block 中放什么?

c++ - 我的缩进样式叫什么。有 emacs 风格吗?

java - 我需要为 Jersey Rest Web 服务编写 Junit 测试用例..请帮助我或发布示例代码?

java - PHP/Java 桥

r - 在 R 中对数据帧进行矢量化循环

矩阵/vector 库中的java最佳实践

java - 变量声明 - 尽可能使用修饰符 'final'。是的,类和方法怎么了?