Luk*_*der 32 java syntactic-sugar jls in-operator
对于百万分之一的时间,我本来希望IN
在Java中使用运算符,类似于IN
SQL中的运算符.它可以作为编译器语法糖实现.所以这
if (value in (a, b, c)) {
}
else if (value in (d, e)) {
}
Run Code Online (Sandbox Code Playgroud)
......真的很棒.事实上,上面的内容与这里相当冗长(并且不适用于原语)的构造相同:
if (Arrays.asList(a, b, c).contains(value)) {
}
else if (Arrays.asList(d, e).contains(value)) {
}
Run Code Online (Sandbox Code Playgroud)
或者这样的int
,long
和类似的形式:
switch (value) {
case a:
case b:
case c:
// ..
break;
case d:
case e:
// ..
break;
}
Run Code Online (Sandbox Code Playgroud)
或者可能有更高效的实现.
这样的东西会成为Java 8的一部分吗?如果没有,我怎么能提出这样的建议呢?或者,我现在可以使用任何等效的构造吗?
Pet*_*rey 19
您可以编写辅助方法来执行此操作.
public static <T> boolean isIn(T t, T... ts) {
for(T t2: ts)
if (t.equals(t2)) return true;
return false;
}
// later
if (isIn(value, a,b,c)) {
} else if (isIn(value, d,e)) {
}
Run Code Online (Sandbox Code Playgroud)
Aar*_*lla 14
使用op4j:
Op.onListFor(a,b,c).get().contains(value);
Run Code Online (Sandbox Code Playgroud)
使用相同的方法,你可以创建一个辅助类Is
用的方法in
:
class Is<T> {
private T value;
public Is( T value ) { this.value = value; }
public boolean in( T... set ) {
for( T item : set ) {
if( value.equals( item ) ) {
return true;
}
}
return false;
}
public static <T> Is<T> is( T value ) {
return new Is<T>( value );
}
}
Run Code Online (Sandbox Code Playgroud)
使用静态导入,您可以编写:
if(is(value).in(a,b,c)) {
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5722 次 |
最近记录: |