如何将switch case从某个值迭代到某个其他值

时间:2014-01-08 20:02:31

标签: java concurrency enums switch-statement

我确实知道Java,但是切换案例......我只想说我已经避免使用它们了,我真的不喜欢它们作为结构。

但现在我被迫使用它们来选择并发问题的通道。在这种情况下,我只是不知道从我被解释的开关改为if-else。

所以我有一系列的案例,从1到N-1。前4我知道案件是什么,他们各自做不同的事情。

从5到N-1,所有这些都是相同的,唯一的区别是,如果是情况7,它必须评估的值是P + 7,依此类推。

我可以以某种方式使用循环吗? N可以达到100000,手工做是非常糟糕的。

更接近我的目标here

当它说:

for (Planet p : Planet.values()) {
System.out.printf("Your weight on %s is %f%n", p, p.surfaceWeight(mass));
}

但我不需要迭代每个值,只需从5到N-1。

请告诉我,如果我没有解释自己,这将是通常的事情。英语是我的第二语言。

编辑:我不是100%确定我能够正确管理这些案例,所以我害怕使用默认值,因为它是并发代码,我宁愿使用一组我可以定义的值。

1 个答案:

答案 0 :(得分:3)

我会使用带有默认值的switch case,存储该值以消除并发问题

final int val = getConcurrentValue();
switch(val) {
    case 1: doThingOne(); break;
    case 2: doThingTwo(); break;
    case 3: doThingThree(); break;
    case 4: doThingFour(); break;
    default: doCommonThing(CONSTANT_VALUE_P + val);
}

或者,如果将它包装在一个方法中(这会大大提高可重用性,最终会消除并发问题。

static void operate(int val) {
    switch(val) {
        // copy switch statement from above
    }
}

// elsewhere
import com.example.util.Functions;

void foo() {
    Functions.operate(getConcurrentValue());
}