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

ssj*_*ssj 11 java database-design

我正在编写查询数据库以获取数据的代码.有些类由Lists 组成,但有时候列表或其他属性无法启动且它们的值是null,所以我需要编写list!=null || list.isEmpty或者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;
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这个类中有一些列表和其他属性,可以都是null空的,我可以做些什么来避免它吗?

Ste*_*n C 5

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

如果答案是“否”,那么您可以编写“数据对象”类来将空值标准化为相应的“带内”值。您可以在 getter 或 setter 或构造函数中执行此操作,具体取决于对象从数据库中具体化的方式。

您可以做的其他几件事是:

  • 更改数据库架构以使相应的列“不为空”。

  • 如果您使用的是 ORM 或数据绑定机制,请尝试将其配置(通过注释或其他方式)使用“带内”值而不是null.

转弯的点null""空数组或集合的是,你不需要治疗“带内”的值作为特殊情况......除非你的应用程序的业务逻辑特别要求这一点。

简而言之,如果您null系统地剔除这些值,则无需在业务逻辑中测试它们。


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

  • 应用程序可能必须处理 4 种不同的情况:

    • 参数不存在

    • 没有值/空值的参数存在

    • 参数存在非空值

    • 参数出现多次。

  • 参数是从标准 API 中获取的,而不是从自定义类中获取的,该类可以根据 web 应用程序的要求对值进行规范化。