2014-09-17 16 views
6

Đây là một đề xuất cải tiến hơn là một câu hỏi.Tại sao dữ liệu Spring vẫn sử dụng tham chiếu null làm giá trị trả về?

Chúng ta đều biết về "lỗi tỷ đô la" của Tony Hoare bằng cách phát minh ra tham chiếu null. Lời khuyên của Google trong wiki của guava library đến avoid using null.

Tôi thực sự đánh giá cao dự án Spring Data và chúng tôi sử dụng dữ liệu Spring MongoDB trong nhiều dự án. Có khả năng bạn sẽ thay thế tất cả các giá trị trả về tham chiếu null có thể bằng một số Optional<T>? Tôi nghĩ rằng đây sẽ là một cải tiến lớn khi sử dụng kho dữ liệu Spring trừu tượng.

Tôi biết rằng rất nhiều giao diện sẽ phải được thay đổi, nhưng thay đổi mã gần như là tầm thường, chỉ cần bọc loại trả về trong một Optional.of(returnValue).

Trả lời

10

Hỗ trợ guava/JDK8 Optional<T> đã được giới thiệu với RC1 của Tàu phát hành Dijkstra. Vui lòng xem qua số spring-data-examples for java8 để biết cách hoạt động.

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: có hỗ trợ cho phương thức mặc định.

+3

Bạn không thể có findOne với Tùy chọn vì phương thức này đã tồn tại với kiểu trả lại Khách hàng mà không cần Tùy chọn – krmanish007

+3

findOne không có Tùy chọn chỉ hiển thị trong CrudRepository. Câu trả lời này hoạt động nếu giao diện của bạn mở rộng Kho lưu trữ. –

1

Tôi nghĩ rằng, một khi dữ liệu mùa xuân có thể thả hỗ trợ cho các phiên bản JDK cũ hơn JDK 8, nó nên được khá dễ dàng để sử dụng JDK 8 tùy chọn. Tuy nhiên, vì điều này sẽ thay đổi toàn bộ API, bạn sẽ phải phát hành một phiên bản chính mới, cùng với các đường dẫn nâng cấp, v.v. (thay đổi mã sẽ là tầm thường, nhưng không phải là hậu quả cho người dùng dữ liệu Spring).

+0

Trong thực tế, họ không phải thả các hỗ trợ JDK cho phiên bản cũ hơn, bởi vì họ có thể dễ dàng thực hiện phiên bản riêng của họ về bắt buộc, như đội ổi đã làm. Và bạn nói đúng, rằng nó phải có trên một phiên bản chính mới, vì những thay đổi lớn về API. Nhưng tôi nghĩ rằng nó thực sự là giá trị để làm điều đó. – marcelhaerle

+0

Bạn có thể tạo yêu cầu tính năng trong JIRA: https://jira.spring.io/browse/DATAMONGO – dunni

Các vấn đề liên quan