java - 如果对象(或任何函数结果)为 null,则调用函数应返回默认值

标签 java null null-check

是否可以将以下代码包装在可重用函数中?

编辑: 这只是一个例子,我想要一个适用于所有递归深度的工作解决方案

我想要的是生成以下代码:

if (MyObject o == null || 
    o.getSubObject() == null ||
    o..getSubObject().getSubSubObject() == null /*|| 
    ... */)
    return defaultValue;
return o.getSubObject().getSubObject()/*...*/.getDesiredValue();

通过调用类似的内容

Object defaultValue = null;
Object result = NullSafeCall(o.getSubObject().getSubObject()/*...*/.getDesiredValue(), defaultValue);

第二个代码块只是一个想法,我不在乎它是什么样子,我想要的是,如果需要的话,我可以在调用更深层次的函数之前避免所有 null 检查...

注入(inject)可以正确地做到这一点,但是没有其他/更简单的解决方案吗?以前从未看过注入(inject)...

编辑2: 另一种语言的示例:http://groovy.codehaus.org/Operators#Operators-SafeNavigationOperator

最佳答案

并非如此,您以这种方式编写的任何代码都会看起来很糟糕并且/或使用非常慢的反射。除非您使用可以理解和更改您编写的代码的实际 Java 预处理器。

更好的(但与大量重构相关的)方法是确保所讨论的值不可能为空。例如,您可以修改各个访问器(getSubObject()getDesiredValue()),使其从一开始就不会返回 null:使它们返回默认值。默认值上的访问器依次返回默认值。

关于java - 如果对象(或任何函数结果)为 null,则调用函数应返回默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17857832/

相关文章:

c - 带有 NULL addr 的 mmap 如何工作?

php - 如何在 php 中区分一个值是零还是 NULL?

java - 如何在 NetBeans 14 中禁用 "unnecessary test for null"警告?

java - 在 Java 1.7 中第一次对 TreeSet 进行 add 调用时触发了compareTo

java - 在 Java Spring Boot 中从 Principal 中提取数据

java - 如何修复在 JAR 文件中指定 "no main manifest attribute"的错误?

java - 忽略基于 Spring Boot 配置文件的测试类

java - 事件发生时 JTextArea 中没有显示文本

c# - 在 c# .net 中对服务结果进行正确的空检查

通过 != null 或 !str.equals(null) 检查 Java 字符串空值?