为什么Spring Data仍然使用空引用作为返回值?

时间:2014-09-17 06:21:24

标签: spring-data

这更像是一个改进的建议,而不是一个问题。

通过发明空引用我们都知道托尼霍尔的“十亿美元错误”。 Google在guava libraryavoid using null的维基中提供建议。

我非常感谢Spring Data项目,我们在许多项目中使用Spring Data MongoDB。是否有可能用Optional<T>替换所有可能的空引用返回值?我认为使用Spring Data存储库抽象时这将是一个很大的改进。

我知道很多接口都需要更改,但代码更改几乎是微不足道的,只需将返回类型包装在Optional.of(returnValue)中。

3 个答案:

答案 0 :(得分:13)

已经在Release Release Dijkstra的RC1中引入了Guava / JDK8 Optional<T>支持。请查看spring-data-examples for java8以查看其工作原理。

interface CustomerRepository extends Repository<Customer, Long> {

  // CRUD method using Optional
  Optional<Customer> findOne(Long id);

  // Query method using Optional
  Optional<Customer> findByLastname(String lastname);
}

BTW:还支持默认方法

答案 1 :(得分:1)

我认为,一旦Spring Data可以放弃对早于JDK 8的JDK版本的支持,使用JDK 8 Optional应该相当容易。但是,由于这会改变整个API,您必须发布一个新的主要版本,以及升级路径等(代码更改将是微不足道的,但不会对Spring Data用户产生影响)。

答案 2 :(得分:1)

使用最新版本的Spring Data the CrudRepository now actually returns `Optional