检查 java 中的列表对象是否为空
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?>
这将从配置中获取所有值。
现在,明天如果我更改配置条目,这应该不会抛出空指针异常
如果你想检查它是否为空,这是正确的方法(即使它永远不会为空),但是如果你只是想检查列表是否为空,那么你应该使用 isEmpty()
方法:
if(listSCBPLNewErrMsgs.isEmpty()) {/**/}
如果您的代码看起来您的 listSCBPLNewErrMsgs 对象不会为空。使用 listSCBPLNewErrMsgs.isEmpty();
测试它是否为空
您需要为 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.
}
}
如果 SCBPL_NEW_ERRORMESSAGES
为 null,则确实会抛出 NPE 异常,因为您将在 null
上使用 split
方法。
您可以先检查它是否不为空:
if (SCBPL_NEW_ERRORMESSAGES != null) {
//Instantiate list
//Optional isEmpty check
}
您将首先检查 SCBPL_NEW_ERRORMESSAGES
是否不为 null
然后您可以实例化您的列表并对新列表执行可选的isEmpty
检查。
Java 中的 new
运算符 永远不会 return null
。 String#split
.
也不行
但是,您可能想要检查的是列表是否为空:
if (listSCBPLNewErrMsgs.isEmpty()) {
// do something
}
如果 SCBPL_NEW_ERRORMESSAGES
为空,代码仍然会失败。
假设 SCBPL_NEW_ERRORMESSAGES
有一些值或为空,拆分将 return 一个大小为 0 或更大的数组。将其从数组更改为列表将生成包含 0 个或更多元素的数组。
最后,复制构造函数将复制内容并将其分配给新列表。在所有场景下,除非SCBPL_NEW_ERRORMESSAGES
上存在空指针,否则returned列表(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<>();
}
if(SCBPL_NEW_ERRORMESSAGES != null)
List<String> listSCBPLNewErrMsgs= new ArrayList<String>Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\$\@")));
不需要大家说的listSCBPLNewErrMsgs != null
首先你必须检查 SCBPL_NEW_ERRORMESSAGES 是 null 还是空
if(!TextUtils.isEmpty(SCBPL_NEW_ERRORMESSAGES))
您必须同时检查列表是否为 null/empty。所以我更喜欢
if(listSCBPLNewErrMsgs != null && !listSCBPLNewErrMsgs.isEmpty()) {
}
我正在使用 java 检查 List
对象是否 null
。但是不知道是不是优化的方式
这是我的代码:
List<String> listSCBPLNewErrMsgs= new ArrayList<String>(Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\$\@")));
上面一行本身抛出空指针异常
if(listSCBPLNewErrMsgs != null) <Right way?>
这将从配置中获取所有值。
现在,明天如果我更改配置条目,这应该不会抛出空指针异常
如果你想检查它是否为空,这是正确的方法(即使它永远不会为空),但是如果你只是想检查列表是否为空,那么你应该使用 isEmpty()
方法:
if(listSCBPLNewErrMsgs.isEmpty()) {/**/}
如果您的代码看起来您的 listSCBPLNewErrMsgs 对象不会为空。使用 listSCBPLNewErrMsgs.isEmpty();
您需要为 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.
}
}
如果 SCBPL_NEW_ERRORMESSAGES
为 null,则确实会抛出 NPE 异常,因为您将在 null
上使用 split
方法。
您可以先检查它是否不为空:
if (SCBPL_NEW_ERRORMESSAGES != null) {
//Instantiate list
//Optional isEmpty check
}
您将首先检查 SCBPL_NEW_ERRORMESSAGES
是否不为 null
然后您可以实例化您的列表并对新列表执行可选的isEmpty
检查。
Java 中的 new
运算符 永远不会 return null
。 String#split
.
但是,您可能想要检查的是列表是否为空:
if (listSCBPLNewErrMsgs.isEmpty()) {
// do something
}
如果 SCBPL_NEW_ERRORMESSAGES
为空,代码仍然会失败。
假设 SCBPL_NEW_ERRORMESSAGES
有一些值或为空,拆分将 return 一个大小为 0 或更大的数组。将其从数组更改为列表将生成包含 0 个或更多元素的数组。
最后,复制构造函数将复制内容并将其分配给新列表。在所有场景下,除非SCBPL_NEW_ERRORMESSAGES
上存在空指针,否则returned列表(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<>();
}
if(SCBPL_NEW_ERRORMESSAGES != null)
List<String> listSCBPLNewErrMsgs= new ArrayList<String>Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\$\@")));
不需要大家说的listSCBPLNewErrMsgs != null
首先你必须检查 SCBPL_NEW_ERRORMESSAGES 是 null 还是空
if(!TextUtils.isEmpty(SCBPL_NEW_ERRORMESSAGES))
您必须同时检查列表是否为 null/empty。所以我更喜欢
if(listSCBPLNewErrMsgs != null && !listSCBPLNewErrMsgs.isEmpty()) {
}