你有沒有想過到try{} catch(NullPointerException e){}
塊?它可能會覺得不那麼優雅,但如果任何方法調用失敗,它將停止您的代碼,因爲前一個返回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)
如果你願意,你可以使用一個稍微不那麼CPU高效,但更易於閱讀,版本的if語句不能嵌套。如果所有if語句都是在彼此之後執行的,則單個null將阻止所有下一個語句執行,儘管每次都會檢查它的值。
至於生成這些陳述,我不太確定。這將取決於您提前多久可以預測以前的方法調用返回的Object
可用的新方法。如果你的目標是代碼自動生成,你可能會更好的我的第一個建議:try-catch
這是有趣的東西:) – saurav