如果我有一个控制器,它将一个Integer作为参数,可以为null
someFunc(...,...
@RequestParam(required=false) Integer integerObjThatCanBeNull,...){
return anotherFunc(...,integerObjThatCanBeNull...);
}
然后将integerObjThatCanBeNull传递给anotherFunc
someFunc(..., int integerPrimitiveThatCanBeNull...){...
如果integerObjThatCanBeNull在最初传入时是否为null,我如何检查someFunc?
答案 0 :(得分:2)
您可以将参数更改为Integer并执行简单的空检查。如果您的参数是int类型,则此处不会获得空值,而是先前的异常。实际上" int integerPrimitiveThatCanBeNull"这是一个非常有趣的宣言。
答案 1 :(得分:1)
您可以在返回前进行简单的空检查。 否则,如果您希望代码更清晰,则可以使用defaultValue,例如,如果整数为null,则强制它为0。 如果它不能为null,那么您可以将'require'更改为true。
你甚至可以这样做
@RequestParam(required=true, defaultValue=0)
答案 2 :(得分:1)
问题是因为您将原始请求中的整数解包为int
中的someFunc
,并且您无法对基元进行空检查。
这样做
someFunc(..., Integer integerPrimitiveThatCanBeNull)
if(integerPrimitiveThatCanBeNull== null)
注意强>
在原始代码中,当null
从服务进入并传递给someFunc
时,它会抛出NullPointerException
,因为您正在尝试将空值放入{{1} }}。在提供的解决方案中,如果在执行if语句中的逻辑后没有返回,则可以获得int
。
答案 3 :(得分:0)
原始类型变量不能接收null
值。如果未分配,则它们将假定为零或默认值(例如:0
为int
,{{1}为{{ 1}},0.0f
代表布尔值,等等。
如果需要在方法业务逻辑上将float
的{{1}}参数表示为null,则该接口的设计不正确,您应该对其进行更改。使您的false
保持int
签名。
答案 4 :(得分:-1)
调用此函数时必须检查integerObjThatCanBeNull!= null
someFunc(..., int integerPrimitiveThatCanBeNull...){...