检查java中的列表对象是否为null

时间:2015-04-08 06:51:48

标签: java null

我正在使用java检查List对象是否为null。但我不确定它是否是优化的方式。

这是我的代码:

List<String> listSCBPLNewErrMsgs= new ArrayList<String>(Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\\$\\@")));

上面的行本身会抛出空指针异常。

if(listSCBPLNewErrMsgs != null) <Right way?>

这将从配置中获取所有值。

现在,明天如果我更改配置条目,这不应该抛出空指针异常

8 个答案:

答案 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()) {
}