2013-07-01 46 views
4

比方说,我想了一堆的变数比较一个静态变量,通常我会做这样的:最好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*/} 

我想认为有一种方法可以做到这一点。

+0

Java在其语法中不提供本地语言。 –

+0

@JimGarrison反正没有干净的方式 – NullUserException

+3

你可以从http://stackoverflow.com/questions/7604814/best-way-to-format-multiple-or-conditions-in-an-if-statement- java – JHS

回答

9

相反的:

if(w == x || w == y || w == z) 

,你可以这样做:

+0

这似乎好多了,谢谢。 – Zachrip

+3

但是数量级要慢一些。 – EJP

+1

@EJP你知道他们说什么*不成熟的优化是所有邪恶的根源*只要这不是应用程序的瓶颈之一,我认为它不应该是一个相关因素。 –

0

你可能更喜欢像这样格式化:

if(w == x || 
    w == y || 
    w == z) 

我发现它有助于打破了条件,使其更易于阅读。

+0

这不是OP正在寻找的东西。你所做的只是重新格式化了几行...... – Tdorno

3

虽然有一个答案接受,我想和大家分享我的方式太:

方法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)) 
0

这是不允许在Java中。但是你可以看看一些基于规则的引擎,例如drools