java 。具有可能可抛出参数的函数(NullpointerException)?

标签 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 block 包围每个表达式或检查每个点是否为 null。

最佳答案

使用Optional.map :

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

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

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

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

关于 java 。具有可能可抛出参数的函数(NullpointerException)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49323628/

相关文章:

java - 使用 HashMap 创建 JTree

Java链表插入方法不重复?

java - 即使路径正确,图像 URI 返回 null

java - 从 JSP 抛出异常

javascript - 如何使用 Redux 时间旅行来处理错误

java - 用Spring实现单例模式的好方法

java - java.lang.String类型的值[{在android中无法转换为JSONObject

android - 应用内结算 v3 无法在没有网络连接或飞行/飞行模式下查询项目

java - LibGdx 自定义平铺类 NullPointer 问题

java - 无法创建 ePub