2008-09-19 116 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对