我有一个数组
String [] array = account.getDetails().split(',');
帐户详细信息有时为空,如何避免出现异常?
我做了类似的事情,但是那不喜欢漂亮。
if (account.getDetails() == null)
{
account.setDetails("");
}
String[] array = account.getDetails().split(',');
那要避免抛出NullPointerException
,这还好吗?或者有更好的方法吗?
答案 0 :(得分:2)
您的实现还可以(在下面进行更多介绍),但是您可以避免在空字符串上调用split(String)
并执行以下操作:
String[] array;
if (account.getDetails() == null) {
array = new String[0];
} else {
array = account.getDetails().split(",");
}
请注意,如果输入为null
,则您的实现将返回一个带有一个空字符串的数组,这将返回一个空数组。
@MarkAdelsberger指出,您不应直接在对象上更改值,这被称为上帝行为。
答案 1 :(得分:2)
使用if else
语句进行空检查是可以的。还需要提到的是,在java8中引入了Optional
,这有助于避免空检查。带有可选的它将看起来像:
String[] strings = Optional.ofNullable(account.getDetails())
.map(s -> s.split(",")).orElse(new String[0]);
答案 2 :(得分:2)
如果您正在寻找一种“更漂亮”的方式,那么这个地方似乎很适合“?”运算符(称为三元运算符)
String[] array = account.getDetails() == null? new String[]{""} : account.getDetails().split(",");
您还可以更改getter或setter / constructor,以使getDetails()方法从不返回null(因为它不会或根本不具有null)。
public String getDetails() {
return details == null? "" : details;
}
答案 3 :(得分:1)
所以我认为这是个好方法,首先使用null
检查是否不是?
的细节,如果不是null
,则只需执行split
将结果分配给变量array
,否则将分配空字符串数组,因为详细信息为null
:
String details = account.getDetails();
String[] array = details != null ? details.split(",") : new String[0];