2015-09-03 48 views
0

我認爲是一個壞主意,返回null值,所以我期待着替代這一點。替代返回空值

這裏是我的代碼:

public Flight getFlight(String id) { 
     for (Flight f : this.flightList) { 
     if (f.getId().equals(id)) 
      return f; 
     } 
     return null; 
    } 

我找了一定的飛行具有一定的ID,我想退貨。

如果我返回null我必須每次檢查我返回的對象是否爲null。如果可能,我想避免這種情況。

因此,任何建議,歡迎。

+0

你可以返回'Optional ',但是你仍然需要檢查可選項是否包含一個值... – assylias

+4

那麼當給定的'id'不存在航班時,你想要發生什麼?那種情況下你的業務邏輯是什麼?在某些時候,您需要檢查是否成功檢索了航班。 – Kayaman

+0

我認爲你太過專注於「不檢查null」部分,對你實際想象的代碼看起來太少了。你總是需要檢查'null',它是否有一個值('Optional')或者是否拋出異常。 –

回答

1

你可以看看Null object pattern(在C#實現爲string.Empty),因爲它

替換NULL對象實例的檢查。而不是如果檢查一個空值,空對象反映了一個什麼都不做的關係。這種Null對象也可用於在數據不可用的情況下提供默認行爲。

你的情況可能是這樣的:

public class NullFlight extends AbstractFlight { 

@Override 
    public String getId() { 
     return "Not Available for null Flight!"; 
    } 

    @Override 
    public boolean isNil() { 
     return true; 
    } 
} 

而且這是一個valid casecollections打交道時,你應該返回,而不是空「新」空的。

0

通常返回null而不是對象是一種不好的做法。有兩種選擇返回null。 Fistly我會建議檢查出Null Object Pattern與定義中性(「null」)的行爲。 第二個想法是當你不能返回一個對象時拋出你自己的異常。

if (f.getId().equals(id)){ return f; }else throw new FlightNotFoundException();

+0

你知道你的代碼不會編譯嗎? – user902383

+0

也許,我正在寫作,只是爲了展示案例。我縮小了範例,希望它不會混淆。 – Thamiar

3

這真的取決於如果事件「飛行未找到」被認爲是例外與否。

當您調用此方法時,如果呼叫代碼預計始終有效,那麼沒有發現它是例外情況。有應該是一個航班,但沒有一個。在這種情況下,最好拋出一個自定義異常,如FlightNotFoundException,其中包含搜索航班的ID。它通常是一個RuntimeException:航班應該在那裏,沒有什麼可以做到的,以從中恢復。

但是,如果這個要求不符合,只要這是正確記錄,我沒有看到任何錯誤返回null