2014-09-17 13 views
6

To jest bardziej sugestia poprawy niż pytanie.Dlaczego dane sprężyn wciąż używają odwołań zerowych jako wartości zwracanych?

Wszyscy wiemy o "pomyłce miliarda dolarów" Tony'ego Hoare, wymyślając referencję zerową. Porady Google na wiki od guava library do avoid using null.

Bardzo doceniam projekt Spring Data i używamy Spring Data MongoDB w wielu projektach. Czy jest szansa, że ​​zastąpisz wszystkie możliwe wartości zwracane przez referencję zerową przez Optional<T>? Myślę, że byłaby to duża poprawa w przypadku korzystania z abstrakcji repozytoriów Spring Data.

Wiem, że wiele interfejsów musiałaby zostać zmieniona, ale zmiany w kodzie są niemal banalne, wystarczy zawrzeć typ zwrotu w postaci Optional.of(returnValue).

Odpowiedz

10

Guava/JDK8 Optional<T> wsparcie zostało już wprowadzone w przypadku RC1 wersji Release Train Dijkstra. Proszę spojrzeć na spring-data-examples for java8, aby zobaczyć, jak to działa.

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: nie ma wsparcia dla metod domyślnych również.

+3

Nie możesz mieć findOne z opcją fakultatywną, ponieważ ta metoda już istnieje z typem zwrotu Klient bez Opcjonalnie – krmanish007

+3

findOne bez Opcjonalny jest tylko obecny w CrudRepository. Ta odpowiedź działa, jeśli twój interfejs rozszerza repozytorium. –

1

Myślę, że gdy Spring Data może zrzucić wsparcie dla wersji JDK starszej niż JDK 8, powinno być dość łatwo używać JDK 8 Opcjonalnie. Ponieważ jednak zmieniłoby to całe API, musiałbyś wydać nową główną wersję wraz ze ścieżkami uaktualnień itp. (Zmiana kodu byłaby banalna, ale nie konsekwencje dla użytkowników Spring Data).

+0

W rzeczywistości nie musi spaść wsparcie dla starszych wersji JDK, ponieważ mogą one łatwo zaimplementować własną wersję z opcjonalnych, takich jak zespół guawa zrobił. Masz rację, że powinna być na nowej wersji głównej ze względu na ogromne zmiany API. Ale myślę, że naprawdę warto to zrobić. – marcelhaerle

+0

Możesz utworzyć żądanie funkcji w JIRA: https://jira.spring.io/browse/DATAMONGO – dunni

Powiązane problemy