如何避免写代码如“XXX!= null”或“XXX!= null || XXX.isEmpty”

时间:2013-05-25 02:09:29

标签: java database-design

我正在编写查询数据库以获取数据的代码。有些类由List组成,但有时无法启动列表或其他属性且值为null,因此我需要编写list!=null || list.isEmpty或{{1}在我可以使用该属性之前。

不幸的是,很容易忘记它,而且每次操作属性时我都认为这样做很难看。我将编写一些代码来解释它。

attribute != null

正如您所看到的,此类中有一些列表和其他属性,可能都是public class SpotVo { private Double avg; private String brief; private ArrayList<HotelVo> hotels; private int id; private ArrayList<byte[]> images; private AddressVo location; private String name; private ArrayList<RestaurantVo> restaurants; } 或空,我可以做些什么来避免它吗?

4 个答案:

答案 0 :(得分:4)

答案取决于null是否具有特殊含义。例如,对于String字段,您的应用是否需要区分null""?对于Collection值字段,是否需要区分null和空集合对象?

如果答案是&#34; no&#34;,那么您可以编写&#34;数据对象&#34;将空值标准化为相应的&#34;带内的类#34;值。您可以在getter或setter或构造函数中执行此操作,具体取决于对象是如何从数据库中实现的。

您可以做的其他一些事情是:

  • 更改数据库架构以使相应的列&#34;不为空&#34;。

  • 如果您正在使用ORM或数据绑定机制,请尝试配置(通过注释或其他)以使用&#34; in band&#34;值而不是null

null转换为""或空数组或收藏品的重点是您不需要处理乐队中的&#34;&#34;值作为一种特殊情况......除非你的应用程序的业务逻辑特别需要这个。

简而言之,如果您系统地标出null值,则无需在业务逻辑中对其进行测试。


请注意,这种方法并不总是有效。令我烦恼的情况是从servlet中的HTTPRequest对象获取参数:

  • 该应用程序可能需要处理4种不同的情况:

    • 参数不存在

    • 参数无值/空值

    • 参数以非空值显示

    • 参数多次出现。

  • 参数是从标准API而不是自定义类中提取的,可以根据webapp的要求对这些值进行规范化。

答案 1 :(得分:0)

您可以编写一个函数来检查对象是否为null和/或它是否为字符串,是""。然后只需在每次需要检查所有条件时调用该函数。让它返回一个布尔值,以便您可以将它插入if语句中。

boolean check(Object o)
{
    if (o != null)
        {
            if (o instanceof String)
            {
                if (((String) o).equals(""))
                    return false;
            }
            return true;
        }
        return false;
}

请参阅评论中的rcook建议,以便更好地实施此建议。

答案 2 :(得分:0)

解决此问题的最简单方法是使用CollectionUtils.isEmpty

  

返回:如果为空,则返回true或null

这样你就可以在一行中完成。

说到“属性”,有一些设计模式可以帮助解决这个问题。或者,您可以使用Guava's Optional课程。您可以在此处详细了解:What's the point of Guava's Optional class

答案 3 :(得分:0)

我认为这里存在两个问题: 一个是你必须检查null值,我绝对同意这是愚蠢的。问题是null是Java语言的原生,因此使其稍微好一点的唯一方法是使用类似Steve P和tieTYT提到的方法。然而,有另一种处理null的方法是从不使用它。当然你不能完全避免它,但至少在你自己的代码中你应该删除所有null - 引用。这里有一些很好的论据,我不会在这里讨论,但你可以阅读Avoiding != null statements了解更多细节。

如果您对基于Java的语言Scala感兴趣,可以通过实现一个可以判断值是否存在的Option类(等于null值)来很好地开发它。关于它的好博文:http://jim-mcbeath.blogspot.fr/2008/10/avoiding-nulls.html

让(大部分)存放空问题,下一个问题是在使用集合时检查isEmpty或类似问题。正如你所说,这就是屁股的痛苦。但我实际上发现这些检查可以在很大程度上避免。这一切都取决于您对集合当然需要做什么,但在大多数情况下,集合用于以某种方式进行遍历或操作。在Java中使用foreach-loop将确保如果集合中没有任何内容,则不会执行任何操作。整齐。

在某些情况下,集合不得为空。其中一些可以避免,通过一个好的设计(例如一个允许空列表,确保没有列表是空的等),但是,对于其余的,没有办法。永远。但是,在消除了空检查后,偶尔调用几个isEmpty并不是那么糟糕: - )

希望有所帮助。