Spring data 为什么Spring数据仍然使用空引用作为返回值?

Spring data 为什么Spring数据仍然使用空引用作为返回值?,spring-data,Spring Data,这与其说是一个问题,不如说是一个改进建议 我们都知道托尼·霍尔发明空引用的“十亿美元错误”。在to的wiki中提供谷歌建议 我非常欣赏Spring数据项目,我们在许多项目中使用Spring数据MongoDB。是否有可能将所有可能的空引用返回值替换为可选的?我认为在使用Spring数据存储库抽象时,这将是一个很大的改进 我知道很多接口都需要更改,但代码更改几乎是微不足道的,只需将返回类型包装成可选。of(returnValue)我认为,一旦Spring数据可以放弃对JDK版本早于JDK 8的支持,

这与其说是一个问题,不如说是一个改进建议

我们都知道托尼·霍尔发明空引用的“十亿美元错误”。在to的wiki中提供谷歌建议

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


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

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

Guava/JDK8
可选的
支持已经在release Train的RC1中引入。请看一下,看看它是如何工作的

interface CustomerRepository extends Repository<Customer, Long> {

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

  // Query method using Optional
  Optional<Customer> findByLastname(String lastname);
}
接口CustomerRepository扩展存储库{
//使用可选的CRUD方法
可选findOne(长id);
//使用可选参数的查询方法
可选findByLastname(字符串lastname);
}

顺便说一句:还支持默认方法。

对于最新和最好的Spring数据版本,实际上他们不能放弃对旧版本的JDK支持,因为他们可以像guava团队那样轻松实现自己的可选版本。您是对的,它应该在一个新的主要版本上,因为API发生了巨大的变化。但我认为这样做是值得的。你可以在JIRA中创建一个功能请求:你不能让findOne with Optional,因为这个方法已经存在,返回类型为Customer with Optional findOne with Optional,它只存在于crudepository中。如果您的接口扩展了存储库,那么这个答案是有效的。