是否可以将以下代码包装在可重用函数中?
编辑: 这只是一个例子,我想要一个适用于所有递归深度的工作解决方案
我想要的是生成以下代码:
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/