我正在使用java检查List
对象是否为null
。但我不确定它是否是优化的方式。
这是我的代码:
List<String> listSCBPLNewErrMsgs= new ArrayList<String>(Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\\$\\@")));
上面的行本身会抛出空指针异常。
if(listSCBPLNewErrMsgs != null) <Right way?>
这将从配置中获取所有值。
现在,明天如果我更改配置条目,这不应该抛出空指针异常
答案 0 :(得分:3)
Java中的new
运算符永远不会返回null
。也不能String#split
。
但是,您可能想要检查的是列表不为空:
if (listSCBPLNewErrMsgs.isEmpty()) {
// do something
}
答案 1 :(得分:1)
如果你想检查它是否为null,它是正确的方法(即使它永远不会为null),但是如果你只是想检查列表是否为空,那么你应该使用isEmpty()
方法:
if(listSCBPLNewErrMsgs.isEmpty()) {/**/}
答案 2 :(得分:1)
从您的代码中查看您的listSCBPLNewErrMsgs对象是否为空。使用listSCBPLNewErrMsgs.isEmpty();
答案 3 :(得分:1)
如果SCBPL_NEW_ERRORMESSAGES
为nulll会导致NPE异常,因为您将在split
上使用null
方法。
您可以先检查是否为空:
if (SCBPL_NEW_ERRORMESSAGES != null) {
//Instantiate list
//Optional isEmpty check
}
首先检查SCBPL_NEW_ERRORMESSAGES
是否为空
然后,您可以实例化列表并对新列表执行可选的isEmpty
检查。
答案 4 :(得分:1)
如果SCBPL_NEW_ERRORMESSAGES
为null,则代码仍会失败。
假设SCBPL_NEW_ERRORMESSAGES
具有某个值或为空,则拆分将返回大小为0或更大的数组。将其更改为数组中的列表将产生具有0个或更多元素的数组。
最后,复制构造函数将复制内容并将其分配给新列表。在所有情况下,除非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<>();
}
答案 5 :(得分:0)
您需要为SCBPL_NEW_ERRORMESSAGES
添加空检查。
if (SCBPL_NEW_ERRORMESSAGES != null && !SCBPL_NEW_ERRORMESSAGES.isEmpty()) {
在您的声明中,列表不能为空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.
}
}
答案 6 :(得分:0)
if(SCBPL_NEW_ERRORMESSAGES != null)
List<String> listSCBPLNewErrMsgs= new ArrayList<String>Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\\$\\@")));
不需要listSCBPLNewErrMsgs != null
所有人都说
答案 7 :(得分:0)
首先,您必须检查SCBPL_NEW_ERRORMESSAGES为空或空
if(!TextUtils.isEmpty(SCBPL_NEW_ERRORMESSAGES))
您必须检查列表是否为空/空。所以我更喜欢
if(listSCBPLNewErrMsgs != null && !listSCBPLNewErrMsgs.isEmpty()) {
}