比方说,我想了一堆的变数比较一个静态变量,通常我会做这样的:最好DRY if语句?
int w = 0;
int x = 1;
int y = 1;
int z = 2;
if(w == x || w == y || w == z){/*more code here*/}
但是,可以得到非常长,似乎没有必要,有什么办法做更类似的事情:
if(w == (x || y || z)){/*more code here*/}
我想认为有一种方法可以做到这一点。
比方说,我想了一堆的变数比较一个静态变量,通常我会做这样的:最好DRY if语句?
int w = 0;
int x = 1;
int y = 1;
int z = 2;
if(w == x || w == y || w == z){/*more code here*/}
但是,可以得到非常长,似乎没有必要,有什么办法做更类似的事情:
if(w == (x || y || z)){/*more code here*/}
我想认为有一种方法可以做到这一点。
你可能更喜欢像这样格式化:
if(w == x ||
w == y ||
w == z)
我发现它有助于打破了条件,使其更易于阅读。
这不是OP正在寻找的东西。你所做的只是重新格式化了几行...... – Tdorno
虽然有一个答案接受,我想和大家分享我的方式太:
方法1类似于接受的答案。但是,我不使用List,而是使用Set。
// make it a static final member if semantically possible
Set<Integer> ALL_VALUES = new HashSet<Integer>(Arrays.asList(a,b,c,d,e,f,g,h));
//.....
if (ALL_VALUES.contains(w)) {
//... do something
}
方法2是写一点实用功能,像
public static <T> boolean sameAsAny(T value, T... possibleValues) {
for (T p : possibleValues) {
if (value == p) {
return true;
}
}
return false;
}
有:在这种情况下,如果有大量的值来对证可能比单独做==
更快这样的实用程序,你可以做这样的事情:
if (sameAsAny(w, x, y, z))
这是不允许在Java中。但是你可以看看一些基于规则的引擎,例如drools。
Java在其语法中不提供本地语言。 –
@JimGarrison反正没有干净的方式 – NullUserException
你可以从http://stackoverflow.com/questions/7604814/best-way-to-format-multiple-or-conditions-in-an-if-statement- java – JHS