你有没有想过一个try{} catch(NullPointerException e){}
街区?它可能感觉不那么优雅,但如果任何方法调用失败,因为前一个方法调用返回,它会停止你的代码,null
如果它为 null,它会给你提供默认值的机会。
另一种选择是这样的:
Something v = /*Default Value*/ // Will be overwritten if subsequent methods succeed.
Object temp = a.getB(); // Use whatever Object type getB() returns.
if(temp != null){
temp = temp.getC();
/* If getC() returns a different type of object,
* either use a different variable or make the temp variable even broader
* (such as the generic Object type) */
if(temp != null){
temp = temp.getD();
if(temp != null){
temp = temp.getE();
if(temp != null)
v = temp;
/* If all previous calls returned something substantial,
* v will be something useful */
}//if(getE() != null)
}//if(getD() != null)
}//if(getC() != null)
}//if(getB() != null)
如果您愿意,您可以通过不嵌套 if 语句来使用 CPU 效率稍低但更易于阅读的版本。如果所有 if 语句都相继执行,则单个 null 将阻止所有下一个语句执行,尽管每次仍会检查其值。
至于生成这些语句,我不太确定。这实际上取决于您可以提前多长时间从Object
先前的方法调用返回的结果中预测哪些新方法可用。如果您的目标是自动生成代码,那么我的第一个建议可能会更好:try-catch