对于基准测试,我需要三种不同的设置(“保留全部”、“保留大小”和“不保留任何内容”),因此我认为可以使用枚举。然后我发现我需要多次运行某些案例(基准测试使用种子随机),而我原来的枚举变得非常不灵活。对于 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?
嗯,并不是很清楚为什么你首先需要这些重复的枚举值 - 我怀疑我有一个枚举,只是包含逻辑值,然后使用填充一个集合相反,重复值。
另一种选择是拥有一个类似于当前枚举的枚举,和一个更逻辑的枚举,其中“重复”枚举的构造函数引用“逻辑”枚举的实例相反。
如果您真的非常想保留当前结构,我个人会放弃 keepSize
和 keepAll
部分的推断,而使用参数化构造函数:
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/