kco*_*ock 1 java enums enumset bit-fields
所以我在我们的应用程序中转换一些位域来代替使用EnumSet,我很好奇是否有更好的方法来对X | Y进行比较.目前我们做的事情如下:
if(bitfield & (X | Y) != 0) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
EnumSet等效似乎是:
if(enumSet.contains(X) || enumSet.contains(Y)) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
有更清洁的方法吗?我知道你可以这样检查containsAll():
EnumSet flagsToCheck = EnumSet.of(X, Y);
if(enumSet.containsAll(flagsToCheck)) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
但这是一个你想知道是否(X & Y)已设置的场景.有没有相同的方法来检查(X | Y)?我认为会有类似于containsAny()方法的东西,但我看不到任何似乎有这种效果的东西.
我会说现有的方法比你的按位方法更具可读性.它准确地说出你的意思:如果集合包含X,或者集合包含Y ...保持原样.它已经干净了.
如果集合变大,您可以使用:
EnumSet<Foo> valid = EnumSet.of(Foo.X, Foo.Y, Foo.A, Foo.B);
valid.retainAll(enumSet);
if (valid.isEmpty()) {
...
}
Run Code Online (Sandbox Code Playgroud)
但我只会保留更大的案例.对于两个或三个选项,我会使用缩写形式.
| 归档时间: |
|
| 查看次数: |
3599 次 |
| 最近记录: |