2013-03-27 81 views
2

我試圖獲得可能會或可能還沒有被使用如何避免多,如果空語句

int i = myFragment.getId();int j = mySecondFragment.getId();初始化幾個片段的ID。

我的問題:有沒有變得比

if (myFragment != null) {int i = myFragment.getId();}每個有效另一個片段的ID的清潔劑/更好的辦法?

+3

看看這個問題:http://stackoverflow.com/questions/271526/avoiding-null-statements-in-java?rq=1 – 2013-03-27 17:59:49

+0

你可以顯示代碼以及你正在嘗試使用它嗎?我無法告訴他最好的方式是用那麼多的信息。 – Rarw 2013-03-27 18:01:59

+0

根據你對id做什麼,你可以用一個虛擬的實現(一個singleton也許)替換空片段,它總是返回一個無效的id或者一個不會改變結果的id。假設你想添加所有的ID。然後你可以讓DummyFragment擴展Fragment和getID(){return 0; }。這樣,你有多少個0結果是一樣的。 – 2013-03-27 18:11:32

回答

2

您可以使用Google Guava

當然類似的功能可以由你來實現,但番石榴提供了一些驚人的例子。

例如,假設一個參數可以爲空,我們稱之爲Optional這個想法是,如果它失敗了,就不接受空值。甚至,爲其定義一個默認值。

public void method(Integer arg){ 
    Optional<Integer> possible = Optional.fromNullable(arg); 
    Integer myNum = possible.get(); // Throws exception if arg is null 
    Integer myNum2 = possible.or(0); // returns 0 if arg is null 
} 

的想法是,你不要讓空獲得通過您的應用程序一定水平,理想會爲它從來沒有得到過去的視圖(或在路上的持久層從DB回) 。

如果這個想法貫穿始終。在業務層的核心中,您不必擔心空值。

還有許多其他的東西,你可以用番石榴做的,如果你決定按照我的建議,一定要充分利用它:)

+0

這可能是我正在尋找的東西,但有一點麻煩將其轉化爲手頭的問題。所以'myFragment'在這裏是可能的'null'值,但是我需要它的id或者0。所以我假設'可選 opFragment = Optional.fromNullable(myFragment);''將阻止nullPointerException,但是如何調用' .get()。getId();'不拋出相同的異常? – Lee 2013-03-27 20:35:18

+0

在這種情況下,您不使用'get','get'將返回正確的值或者如果爲null,則快速失敗,在這種情況下,您需要使用'opFragment.or(0)' – 2013-03-28 11:07:11

0

如果它的東西,你做了很多,那麼你可以做一個函數那爲你做檢查。因此,而不是鍵入

if (myFragment != null) {int i = myFragment.getId();} 

所有的時間,你可以不喜歡

public ID getFragmentId(Fragment myFragment){ 
    if (myFragment != null) { 
     return myFragment.getId(); 
    } else { 
     return someDefaultValue; 
    } 
} 

然後就叫

i = getFragmentID(myFragment); 

避免了大量的repetetive打字,將讓你的代碼位清晰。

相關問題