如何使用最少的代码比较一个整数?

时间:2019-01-17 08:53:45

标签: java

模型中有一个名为foo的Integer属性。现在,我需要知道它等于1还是2。通常我使用:

if (null != model) {
    Integer foo = model.getFoo();
    if (foo != null) {
        if (foo == 1) {
            // do something...
        }
        if (foo == 2) {
            // do something...
        }
    }
}

是否有一些简便的代码可以避免NullPointerException?

6 个答案:

答案 0 :(得分:6)

您可以使用Optional

Optional.ofNullable(model)
        .map(Model::getFoo)
        .ifPresent(foo -> {
            switch (foo) { // or if-else-if, the important thing is you skip the null check
                case 1: 
                    ...
                    break;
                case 2:
                    ...
                    break;
                ...
            }

        });

答案 1 :(得分:2)

您可以使用null安全java.util.Object.equals

if(null != model) {
   Integer foo = model.getFoo();

   if(Objects.equals(foo, 1){
       //do something
   }
   if(Objects.equals(foo, 2){
       //do something
   }
}

该方法具有以下说明:

  

如果参数彼此相等,则返回true,否则返回false。因此,如果两个参数都为null,则返回true;如果正好一个参数为null,则返回false。否则,将使用第一个参数的equals方法确定相等性。

答案 2 :(得分:1)

您可以做Integer.of(1).equals(foo),但这有点傻。为什么要保存一行?我只是将其放在相同的if/else-if链中(如果长度过长,请考虑使用switch/case(尽管它也不是null安全的)。

if (foo == null)
else if (foo == 1)
else if (foo == 2)

还要注意,将对象与==进行比较有点棘手,因为自动装箱的工作原理(或不起作用)。我认为在这种情况下可以工作,但是我不想太费力地思考,因此在我的代码中,我通常会下降到int(在空检查之后)为了安全起见。

答案 3 :(得分:1)

编辑代码,如下所示:

 if (null != model) {
        Integer foo = model.getFoo();
            if (Integer.valueOf(1).equals(foo)) {
                // do something...
            }
            if (Integer.valueOf(2).equals(foo)) {
                // do something...
            }

}

希望对您有所帮助。

答案 4 :(得分:1)

假设可能的值仅为12 当然,应该使用null检查来保护模型 使用三元运算符

Model theModel = model.getFoo() ;

if(model!=null && model.getFoo()!=null){
   model.getFoo() == 1 ? callOne() : call2();
}

答案 5 :(得分:1)

如果您没有返回空的前哨值,而是使用了Optional,则可以这样做:

Optional<Model> model = getModel();
Optional<Integer> foo = model.flatMap(Model::getFoo);
foo.filter(Integer.valueOf(1)::equals).ifPresent(this::doSomething);
foo.filter(Integer.valueOf(2)::equals).ifPresent(this::doSomethingElse);