Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当拆分引发异常时,为Null Getter_Java - Fatal编程技术网

Java 当拆分引发异常时,为Null Getter

Java 当拆分引发异常时,为Null Getter,java,Java,我有一个数组 字符串[]数组=account.getDetails.split',' 账户明细有时为空,如何避免异常 我做了一些类似的事情,但那不喜欢漂亮 if (account.getDetails() == null) { account.setDetails(""); } String[] array = account.getDetails().split(','); 为了避免抛出NullPointerException,这可以吗?或者有更好的方法吗?您的实现在下面更详细,但

我有一个数组

字符串[]数组=account.getDetails.split','

账户明细有时为空,如何避免异常

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

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

String[] array = account.getDetails().split(',');
为了避免抛出NullPointerException,这可以吗?或者有更好的方法吗?

您的实现在下面更详细,但是您可以避免在空字符串上调用splitString,并执行以下操作:

String[] array;
if (account.getDetails() == null) {
   array = new String[0];
} else {
   array = account.getDetails().split(",");
}
请注意,如果输入为null,您的实现将返回带有一个空字符串的数组,这将返回一个空数组

正如@MarkAdelsberger所指出的,您不应该直接更改对象上的值,这被称为god行为。

Null检查if else语句是否正确。还需要提到的是,在java8中引入了一种有助于避免空检查的方法。使用可选选项时,它将如下所示:

String[] strings = Optional.ofNullable(account.getDetails())
    .map(s -> s.split(",")).orElse(new String[0]);

所以在我看来,这里是一个好方法,首先你检查一下细节是否为空?如果不为null,则只需执行拆分并将结果分配给变量数组,否则将分配空字符串数组,因为详细信息为null:


如果你正在寻找一种更漂亮的方法,那么这是一个对于叫做三元运算符的“?”运算符来说很合适的地方

String[] array = account.getDetails() == null? new String[]{""} : account.getDetails().split(",");
您还可以更改getter或setter/constructor,以便getDetails方法永远不会返回null,因为它不会返回null,或者因为它根本没有null

public String getDetails() {
    return details == null? "" : details;
}

您的代码无法编译,无法在字符上拆分字符串。你的if声明完全可以接受。如果account.getDetails为null,我们不知道您希望数组是什么,所以我们也帮不了什么忙;无法使用您的代码,因为在代码中我有一个字符串,该字符串接受数组[0],这会导致弹出该数组可能未初始化。该数组肯定会初始化,肯定还有其他错误。我认为OP的实现不好,因为它在开始为null的情况下会不必要地更改属性值——在许多情况下,这不是god behavior.Up-behavior,因为它显示了正确的Java 8方式来处理可能为null的属性;但我不同意OP的支票没问题的说法。If也可以,但可能需要检查null并提供另一个表达式,但OP所做的是更改代码中的属性,而这可能并不意味着要这样做
public String getDetails() {
    return details == null? "" : details;
}