处理空物体

时间:2010-12-16 10:14:00

标签: null

我已经做了很多关于处理null对象的最佳方法的研究。 到目前为止我遇到的最好的是使用三元运算符。

String x = object.getString1!=null?object.getString1:""; 

但是我对此并不满意,因为它仍然意味着不断检查null。 我读到的另一件事是没有getter方法返回null但返回“Null Object”实例。 但是我没有看到我如何才能使它适用于Integers / BigDecimal / etc ...因为它们默认保存一个值。

我也不是100%热衷于实现NullObjects的想法。有没有其他人更好地了解如何处理null?

2 个答案:

答案 0 :(得分:1)

如果您的方法适合您,为什么不将它重构为静态方法并一直使用?

Google Guava为字符串做了类似的事情。如果你看一下Strings类的内幕,你可以看到nullToEmpty方法,它是这样实现的:

public static String nullToEmpty(@Nullable String string) {
    return (string == null) ? "" : string;
 }

不要关注@Nullable注释。

但是从你的代码中,我怀疑潜伏着更大的问题。 Null Integers和BigDecimal表示某些东西,某些地方不是很正确,你可能想要查看相关部分。将这些对象设置为null可以指示您应该抛出异常,但当然这个决定取决于您。

答案 1 :(得分:0)

假设您使用的是C#,则可以使用operator ??

String x = object.getString1 ?? "";

,恕我直言,更具可读性。

至于你的问题,我无法看到在Null Object模式中使用值类型的重点,因为你已经注意到它们不能保持null值,除非它们被声明为Nullable所以你总是会有一个< em>有效值(在语言域中有效,但在应用程序域中可能无效)。所以,这是一个完全不同的问题。

你用空指针做什么真的取决于上下文,也许Null对象是合适的,但如果它不可行,你应该抛出一个异常或者使用一些默认值......