Java的。可能抛出的params(NullpointerException)的函数?

时间:2018-03-14 08:36:14

标签: java exception nullpointerexception

当我有许多可以抛出异常的表达式时,例如:

instanceObj.final_doc_type = instance.getFinalDocument().getValue().getType().getValue();
instanceObj.final_doc_date = instance.getFinalDocument().getValue().getDate().toGregorianCalendar().getTime();
instanceObj.appeal_date = instance.getFinalDocument().getValue().getAppealDate().getValue().toGregorianCalendar().getTime();
...
instanceObj.start_doc_type = instance.getStartDocument().getValue().getDocType().getValue();
instanceObj.apeealed_type = instance.getStartDocument().getValue().getApeealedType().getValue();
instanceObj.declarers_list_mult_id = instance.getStartDocument().getValue().getDeclarers().getValue().getString();
...

是否有任何方法可以通过一些一个 函数来处理这些表达式,如果参数无效并抛出异常,它将返回一些默认值(或null) - 这个可以发生,例如:

instance.getFinalDocument().getValue().getDate() = null 

因此,我不需要使用try-catch块包围每个表达式,或者检查每个点是否为null。

1 个答案:

答案 0 :(得分:7)

使用Optional.map

instanceObj.final_doc_type = 
    Optional.ofNullable(instance)
      .map(Instance::getFinalDocument)
      .map(Document::getValue)
      .map(Value::getType)
      .map(Type::getValue)
      .orElse(null);

如果链中的任何内容为final_doc_type,则会将null设置为null

如果您只想在非空值的情况下设置其值,请删除该分配,并将orElse更改为ifPresent

Optional.ofNullable(instance)
    /* ... */
    .ifPresent(t -> instanceObj.final_doc_type = t);