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

mar*_*rle 8 spring-data

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

通过发明空引用,我们都知道Tony Hoare的"十亿美元错误".在的维基谷歌建议番石榴库,以避免使用空.

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

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

Chr*_*obl 13

Optional<T>已经与Release Train Dijkstra的 RC1一起引入了Guava/JDK8 支持.请查看java8spring-data-examples以了解它是如何工作的.

interface CustomerRepository extends Repository<Customer, Long> {

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

  // Query method using Optional
  Optional<Customer> findByLastname(String lastname);
}
Run Code Online (Sandbox Code Playgroud)

BTW:也支持默认方法.

  • findOne without Optional仅存在于CrudRepository中.如果您的接口扩展了Repository,则此答案有效. (4认同)
  • 您不能将findOne与Optional一起使用,因为此方法已存在,返回类型为Customer without Optional (3认同)