![](/img/trans.png)
[英]How can I avoid null pointer access warning when the check is inside a method?
[英]Can I avoid a null check when comparing an Integer that may be null with a constant?
我使用Java 7中的Struts2框架,结合Dojo 1.8或1.9(在极少数情况下为1.3)作为前端库,具体取决于页面。 我有几个带有Dojo Selects或FilteringSelects的搜索页面,它们返回一个Integer值:0和更高的值是合法值,-1和null是在Select中未选择任何内容时返回的值,具体取决于页面是否刚刚加载或是否已被Java语言重置。
搜索时,我必须检查Integer中是否存在合法值,如果未将其设置为null,则我的搜索服务方法知道应该忽略该值。 这意味着如果为-1,则将其设置为null;如果为null或> = 0,则将其保留为原样。
目前,我在方法开始时通过以下检查来执行此操作:
// as a class constant
public static final int DOJO_NO_SELECTION = -1;
// in my search action
if (view.getNullableInteger() != null && view.getNullableInteger() == DOJO_NO_SELECTION) {
view.getNullableInteger(null);
}
我觉得前面多余的nullcheck很丑陋,想避免这种情况。 我试图这样做:
// as a class constant
public static final Integer DOJO_NO_SELECTION = new Integer(-1);
if (view.getNullableInteger().equals(DOJO_NO_SELECTION)) {
view.getNullableInteger(null);
}
我试过翻转2:
if (DOJO_NO_SELECTION.equals(view.getNullableInteger())) {
view.getNullableInteger(null);
}
但是当view.getNullableInteger()
为null时,这两个都给我NullPointerException。
是否可以编写此代码,从而避免执行nullcheck,但仍然适用于null?
使用Objects.equals
:
if (Objects.equals(view.getNullableInteger(), DOJO_NO_SELECTION)) {
view.getNullableInteger(null);
}
如果参数彼此相等,则返回true;否则返回false。 因此,如果两个参数都为null,则返回true; 如果正好一个参数为null,则返回false 。 否则,将使用第一个参数的equals方法确定相等性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.