Null Getter,拆分抛出异常时

时间:2019-02-27 20:02:26

标签: java

我有一个数组

String [] array = account.getDetails().split(',');

帐户详细信息有时为空,如何避免出现异常?

我做了类似的事情,但是那不喜欢漂亮。

if (account.getDetails() == null) 
{
   account.setDetails("");
}

String[] array = account.getDetails().split(',');

那要避免抛出NullPointerException,这还好吗?或者有更好的方法吗?

4 个答案:

答案 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];