为了账号安全,请及时绑定邮箱和手机立即绑定

Null Getter,拆分时抛出异常

Null Getter,拆分时抛出异常

慕仙森 2022-07-14 10:12:48
我有一个数组String [] array = account.getDetails().split(',');账户明细有时为空,如何避免异常?我做了类似的事情,但不喜欢漂亮。if (account.getDetails() == null) {   account.setDetails("");}String[] array = account.getDetails().split(',');避免抛出NullPointerException,这样可以还是有更好的方法?
查看完整描述

4 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

如果您正在寻找一种“更漂亮”的方式,那么这是一个适合“?”的地方。运算符(称为三元运算符)


String[] array = account.getDetails() == null? new String[]{""} : account.getDetails().split(",");

您还可以更改 getter 或 setter/constructor,以便 getDetails() 方法永远不会返回 null(因为它不会或因为它根本没有 null)。


public String getDetails() {

    return details == null? "" : details;

}


查看完整回答
反对 回复 2022-07-14
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

您可以避免调用split(String)空字符串并执行以下操作:


String[] array;

if (account.getDetails() == null) {

   array = new String[0];

} else {

   array = account.getDetails().split(",");

}

请注意,如果输入为 ,您的实现将返回一个带有一个空字符串的数组null,这将返回一个空数组。


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


查看完整回答
反对 回复 2022-07-14
?
FFIVE

TA贡献1797条经验 获得超6个赞

if else使用语句进行空检查是可以的。还需要提到的是,在 java8Optional中引入了一个,这有助于避免空检查。使用可选时,它将如下所示:

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


查看完整回答
反对 回复 2022-07-14
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

所以这是我认为的好方法,首先你检查细节是否没有null使用?,如果不是null你只是做split并将结果分配给变量array,否则你分配空字符串数组,因为细节是null:


String details = account.getDetails();

String[] array = details != null ? details.split(",") : new String[0];


查看完整回答
反对 回复 2022-07-14
  • 4 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信