我想从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()
无济于事。我应该停止尝试懒惰吗?或者有办法做到这一点吗?
答案 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();
}
第二个版本更简单,更易读。也可能更快。