java - 如何避免编写类似 "XXX!=null"或 "XXX!=null || XXX.isEmpty"的代码

标签 java database-design

<分区>

我正在编写查询数据库以获取数据的代码。有一些类由List组成,但是有时list或其他属性无法启动,它们的值为null,所以我需要写list !=空 || list.isEmptyattribute != 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;
}

如您所见,这个类中有一些列表和其他属性,都可以是null或为空,我可以做些什么来避免它吗?

最佳答案

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

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

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

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

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

null 转换为 "" 或空数组或集合的要点是您不需要将“带内”值视为特例...除非您的应用程序的业务逻辑特别需要这一点。

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


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

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

    • 参数不存在

    • 没有值/空值的参数

    • 存在非空值的参数

    • 多次出现参数。

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

关于java - 如何避免编写类似 "XXX!=null"或 "XXX!=null || XXX.isEmpty"的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16745775/

相关文章:

sql - rails : Is this a use case for Single Table Inheritance (STI)?

java - 为什么 Java 中的 boolean 值不支持类型转换

java - NetLogo 的安全问题

java - xuggle并发转码

python - SQLAlchemy 中的多对一关系

database - 在数据库列中存储分隔列表真的那么糟糕吗?

java - Java 中通用签名的区别

java - Google Java api - feed.insert(entry) 期间出现错误 "com.google.gdata.util.ServiceException: Bad Gateway"

database - postgresql 的继承和外键约束?

mysql - NoSQL 投票系统