如果声明最好DRY?

时间:2013-07-01 23:14:29

标签: java if-statement dry

假设我想将一堆变量与一个静态变量进行比较,通常我会这样做:

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*/}

我想有一种方法可以这样做。

4 个答案:

答案 0 :(得分:9)

而不是:

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

你可以这样做:

if(Arrays.asList(x, y, z).contains(w))

答案 1 :(得分:3)

虽然接受了答案,但我也想分享我的方式:

方法1与接受的答案类似。但是,我使用Set而不是使用List。在这种情况下,如果有大量值要检查,它可能比单独执行==更快:

// 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)) 

答案 2 :(得分:0)

您可能更喜欢将其格式化为:

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

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

答案 3 :(得分:0)

Java中不允许这样做。但您可以查看一些基于规则的引擎,例如drools