繁体   English   中英

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

[英]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_ERRORMESSAGESSCBPL_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM