Java切换使用方法

时间:2014-07-02 20:23:24

标签: java switch-statement

我想从switch语句中调用一个对象的方法 在这里,我正在启用String

switch (properties.getProperty("my.property")) { // getProperty() retuns a String
  case contains("something"):
    doSomething();
    break;
}

我可以像这样执行switch' ed对象的方法吗?基本上我试图避免这样做:

case properties.getProperty("my.property").contains("something"):

我很确定这是一个失败的原因,但也许我错过了一些东西......

我尝试使用contains().contains()无济于事。我应该停止尝试懒惰吗?或者有办法做到这一点吗?

3 个答案:

答案 0 :(得分:6)

不,你不能。 switch / case语句用于简单“这个常量值映射到这组操作;此常量值映射到这组操作; ...”。

如果您需要更复杂的处理,则应使用if语句。

答案 1 :(得分:1)

如果你绝对想要使用开关,你可以这样做:

  switch("true") {
         case aFunctionThatReturnsTrueOrFalse():

 }

这不是很合适,但它应该很难实现

答案 2 :(得分:1)

正如@JonSkeet已经指出的那样,你不能概括switch语句来做你想做的事情。

在某些情况下,你可以"欺骗"它:例如,使用字符串,您可以使用switch语句进行完全匹配。在您的情况下,您也可以使用正则表达式稍微混淆的方式执行此操作:

Pattern pattern = Pattern.compile("something|else");
Matcher matcher = pattern.matcher(properties.getProperty("my.property"));

switch(matcher.find() ? matcher.group() : "") {
case "something":
    doSomething();
    break;
case "else":
    doSomethingElse();
    break;
default:
    doDefault();
}

我不认为上述内容比使用if s的明显方法有任何改进:

if(prop.contains("something")) {
    doSomething();
} else if(prop.contains("else")) {
    doSomethingElse();
}

第二个版本更简单,更易读。也可能更快。