2008-09-19 132 views
0

能夠爲null對象提供方法返回值會有用嗎?對於null對象有方法返回值是否有用?

某個列表的空返回值可能是:

get(int) : null 
size() : 0 
iterator() : empty iterator 

這將使以下代碼少null檢查。

List items = null; 

if(something) { 
    items = ... 
} 

for(int index = 0; index < items.size(); index++) { 
    Object obj = items.get(index); 
} 

只有在類或接口定義了它並且空檢查仍然有效時纔會使用。有時候你不想做空檢查,所以看起來好像把它作爲一個選項。

來源:http://jamesjava.blogspot.com/2007/05/method-return-values-for-null-objects.html

+0

相關想法:HTTP:// www.jroller。com/scolebourne/entry/java_7_null_default_and – 2009-01-06 15:32:21

回答

0

這是一個好主意。

Smalltalk會這樣做。

有一個NULL對象。它不是從Object下降。 (Smalltalk是一個像Java這樣的單獨的類層次結構)

對於高級學生,您可以對其進行分類以製作代理!

0

紅寶石圖案做這個(以及其他)。它有nil而不是null,它是一個對象。

我dp恨當函數返回列表可以返回null。最好返回一個空列表,並讓用戶決定是否要檢查是否爲空(空)。

+0

什麼是好。因爲nil是一個對象,所以很容易實現null模式。只需將該方法放在無對象上即可。 :-) – marcospereira 2008-09-19 05:57:45

3

很高興不必檢查NULL,並且一些語言使它更容易 - 例如, C#的非可空類型或Haskell,它沒有NULL,但可以用Maybe類型構造函數表示缺少的值。

NULL與空列表不同。你可以採取一種觀點,即在需要列表的情況下傳入NULL的某個人正在犯一個編程錯誤,而正確的做法是拋出一個NullPointerException。

接受NULL的典型藉口是,經常會出現這種情況,您不需要列表,也不必創建一個空的新列表,特別是在對效率有所顧慮的情況下。您可以在不改變語言的情況下獲得許多好處,但是通過擁有一個人們可以傳入的靜態EmptyList,永遠不需要重新初始化。

0

在C#(其他語言)中,通常不允許。沒有Foo的實例,.net不知道調用Foo的方法或Foo的孩子的方法。

然而,C#3.0擴展方法應用於富型將允許此:

Foo x = null; 
if (x.Bar() == 0) 
{ 
    Console.WriteLine("I win"); 
} 

酒吧可以構造如下所示:

public static int Bar (this Foo theFoo) 
{ 
    return theFoo == null ? 0 : 1; 
} 
斯蒂芬Colebourne對
相關問題