Java 最好的干燥如果声明?

Java 最好的干燥如果声明?,java,if-statement,dry,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*/} 我想有一种方法可以做到这一点。而不是: if(w == x || w == y || w

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

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)
你可以做:

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

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

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

我发现它有助于打破这种状况,让阅读变得更容易。

虽然有一个答案是可以接受的,但我也想分享一下我的方法:

方法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
}

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

Java在其语法中并没有提供这一点。@JimGarrison不是以一种干净的方式。你可以从@JimGarrison那里获得一些见解。我想避免做类似的事情,实际上我所做的只是让事情保持简洁,同时仍然以非黑客的方式完成工作。@Junaid谢谢,我在搜索时没有看到这一点。但速度要慢几个数量级。@EJP你知道他们说过早优化是万恶之源,所以只要这不是应用程序的瓶颈之一,我认为这不应该是一个相关因素。这不是OP所寻找的。你所做的只是重新格式化了几行。。。
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))