Switch Case语句枚举不起作用?

时间:2014-05-26 09:53:48

标签: java enums

我有一个关于java中的switch / case语句和enums的问题。

在我的代码中,我想基于对象“currentMethod”中设置的“MatchingMethods”类型的Enum做一些事情。 枚举“MatchingMethods”包含

形式的几个枚举
{EXACT_STRING_MATCHING, DEPTH_MATCHING, [...]}

现在奇怪的是,对象“currentMethod”包含“EXACT_STRING_MATCHING”类型的枚举,不仅第一种情况被执行,而且第二种情况也被执行。

我知道在第一个案例的代码之后没有break语句但是在我看来不应该执行第二个案例的代码,因为枚举“EXACT_STRING_MATCHING”与“DEPTH_MATCHING”不匹配。

如果我在第一个案例之后发表了一个中断声明,那似乎完全没问题......

我的代码如下:

    [...]
    MatchingMethods mM = currentMethod.getMatchMethod();

    switch (currentMethod.getMatchMethod()) {
    case EXACT_STRING_MATCHING:
        //do something here
    case DEPTH_MATCHING:
        comparedNodePair.setDepthMatchResult(currentMetricResult);
        break;
    [...]

我完全糊涂了......

愿有人能帮助我吗?

3 个答案:

答案 0 :(得分:2)

但它会被执行,因为一旦其中一个case语句为true,执行流程就会“落到”,请参阅here获取某些信息

答案 1 :(得分:1)

您已经提到过,您没有break - switch就像goto一样,其中case是要跳过的标签而没有“边界”或功能。

这也是关于switch的最大批评,因为今天没有人会使用goto,但switch肯定是相似的。

答案 2 :(得分:0)

如果在case块的末尾没有break语句,这是正常的。 如果您只想要执行确切的块,则添加break语句是必要的。