我有一个包含4个对象的数组,其中只有一个不是null
。我想调用一个方法,将该变量作为参数。
Block[] b = getIntersectingBlocks(e); // I get 4 Block variables, and only one of them is not null
// ...
Listener.myMethod(notNullBlock); // notNullBlock should be the block out of the array, that is not null
这样做的最快方法是什么,并避免这样的if - else
语句:
if (b[0] != null) {
Listener.myMethod(b[0]);
} else if (b[2] != null) {
Listener.myMethod(b[1]);
}
// ...
答案 0 :(得分:3)
这不使用多个if
,并且适用于任意长度的数组:
for (Block block : b)
if (block != null)
Listener.myMethod(block);
如果多个Block
可以为非null,请添加break
以防止多次调用侦听器:
for (Block block : b) {
if (block != null) {
Listener.myMethod(block);
break;
}
}
答案 1 :(得分:1)
如果您理解了自己的问题,可以使用大量嵌套三元组(请不要在实际代码中执行此操作),
final Block notNullBlock = (b == null || b.length != 4) ? null :
b[0] != null ? b[0] : b[1] != null ? b[1] : b[2] != null ? b[2] :
b[3];
您也可以使用for-each循环(但需要if
) -
Block notNullBlock = null;
for (Block block : b) {
if (block != null) {
notNullBlock = block;
break;
}
}
答案 2 :(得分:1)
用于每个循环
for(Block bl:bArray){
if(bl !=null)
Listener.myMethod(b1);
}
答案 3 :(得分:1)
假设您有一个Block数组,如下所示: Block [] blocksArray = {null,null,new Block(),null};
将上面的数组传递给此方法:
private Block provideBlock(Block[] blocksArray) {
for(Block block : blocksArray) {
block instanceof Block? return block : continue;
}
}
然后在代码中使用返回的非空块:
Block block = provideBlock(blocksArray);
Listener.myMethod(block);