[英]Check whether list object is null in java
我正在使用java检查List
对象是否为null
。 但我不确定它是否是优化的方式。
这是我的代码:
List<String> listSCBPLNewErrMsgs= new ArrayList<String>(Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\\$\\@")));
上面的行本身抛出空指针异常。
if(listSCBPLNewErrMsgs != null) <Right way?>
这将从配置中获取所有值。
现在,明天如果我更改配置条目,这不应该抛出空指针异常
Java中的new
运算符永远不会返回null
。 String#split
也不能。
但是,您可能想要检查的是列表不为空:
if (listSCBPLNewErrMsgs.isEmpty()) {
// do something
}
如果你想检查它是否为null,它是正确的方法(即使它永远不会为null),但是如果你只是想检查列表是否为空,那么你应该使用isEmpty()
方法:
if(listSCBPLNewErrMsgs.isEmpty()) {/**/}
从您的代码看看您的listSCBPLNewErrMsgs对象不会为null。 使用listSCBPLNewErrMsgs.isEmpty();
测试它是否为空listSCBPLNewErrMsgs.isEmpty();
如果SCBPL_NEW_ERRORMESSAGES
为nulll,则会抛出NPE异常,因为您将在null
上使用split
方法。
您可以先检查是否为空:
if (SCBPL_NEW_ERRORMESSAGES != null) {
//Instantiate list
//Optional isEmpty check
}
您将首先检查SCBPL_NEW_ERRORMESSAGES
是否为空
然后,您可以实例化列表并对新列表执行可选的isEmpty
检查。
如果SCBPL_NEW_ERRORMESSAGES
为null,则代码仍将失败。
假设SCBPL_NEW_ERRORMESSAGES
具有某个值或为空,则拆分将返回大小为0或更大的数组。 将其更改为数组中的列表将生成具有0个或更多元素的数组。
最后,复制构造函数将复制内容并将其分配给新列表。 在所有情况下,除非SCBPL_NEW_ERRORMESSAGES
上SCBPL_NEW_ERRORMESSAGES
指针,否则返回的列表( listSCBPLNewErrMsgs
)将永远不为空,最多它将为空,可以使用isEmpty()
方法调用来检查。
根据您的注释,如果您在该行上获得null
指针,则应该是因为SCBPL_NEW_ERRORMESSAGES
为空。
尝试这个:
List<String> listSCBPLNewErrMsgs = null;
if(SCBPL_NEW_ERRORMESSAGES != null) {
listSCBPLNewErrMsgs= new ArrayList<String>(Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\\$\\@")));
}
else {
listSCBPLNewErrMsgs = new ArrayList<>();
}
您需要为SCBPL_NEW_ERRORMESSAGES
添加空检查。
if (SCBPL_NEW_ERRORMESSAGES != null && !SCBPL_NEW_ERRORMESSAGES.isEmpty()) {
在您的声明中,list不能为null,因为您正在执行new ArrayList<String>
。 所以不必担心空指针异常。
如果您想检查空列表。 然后你可以尝试isEmpty()
方法。
if (SCBPL_NEW_ERRORMESSAGES != null && !SCBPL_NEW_ERRORMESSAGES.isEmpty()) {
List<String> listSCBPLNewErrMsgs = new ArrayList<String>(Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\\$\\@")));
if (!listSCBPLNewErrMsgs.isEmpty()) {
// Do something.
}
}
if(SCBPL_NEW_ERRORMESSAGES != null)
List<String> listSCBPLNewErrMsgs= new ArrayList<String>Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\\$\\@")));
不需要listSCBPLNewErrMsgs != null
正如大家所说
首先,您必须检查SCBPL_NEW_ERRORMESSAGES为空或空
if(!TextUtils.isEmpty(SCBPL_NEW_ERRORMESSAGES))
您必须检查列表是否为空/空。 所以我更喜欢
if(listSCBPLNewErrMsgs != null && !listSCBPLNewErrMsgs.isEmpty()) {
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.