Java获取非null的对象

时间:2014-06-11 03:37:14

标签: java null

我有一个包含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]);
}
// ...

4 个答案:

答案 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);