2014-09-17 6 views
6

Dies ist eher ein Verbesserungsvorschlag als eine Frage.Warum verwendet Spring Data weiterhin Nullreferenzen als Rückgabewerte?

Wir alle wissen über Tony Hoares "Milliarden Dollar Fehler" durch die Erfindung der Null-Referenz. Google-Ratschläge im Wiki der guava library zu avoid using null.

Ich schätze das Spring Data-Projekt und wir verwenden Spring Data MongoDB in vielen Projekten. Besteht die Möglichkeit, dass Sie alle möglichen Null-Referenz-Rückgabewerte durch eine Optional<T> ersetzen? Ich denke, das wäre eine große Verbesserung bei der Verwendung der Spring Data Repositories Abstraktion.

Ich weiß, dass viele der Schnittstellen geändert werden müssten, aber die Codeänderungen sind fast trivial, nur wickeln Sie den Rückgabetyp in eine Optional.of(returnValue).

Antwort

10

Guava/JDK8 Optional<T> Unterstützung wurde bereits mit RC1 von Release Train Dijkstra eingeführt. Bitte schauen Sie sich die spring-data-examples for java8 an, um zu sehen, wie es funktioniert.

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: Es gibt Unterstützung für Standardmethoden auch.

+3

Sie können nicht findOne mit Optional haben, da diese Methode bereits mit dem Rückgabetyp Kunde ohne Optional vorhanden ist – krmanish007

+3

findOne ohne Optional ist nur vorhanden in CrudRepository. Diese Antwort funktioniert, wenn Ihre Schnittstelle das Repository erweitert. –

1

Ich denke, sobald Spring Data kann die Unterstützung für JDK-Versionen älter als JDK 8 fallen lassen, sollte es recht einfach sein, das JDK 8 Optional zu verwenden. Da dies jedoch die gesamte API ändern würde, müssten Sie eine neue Hauptversion zusammen mit Upgradepfaden usw. veröffentlichen (die Codeänderung wäre trivial, aber nicht die Konsequenzen für die Benutzer von Spring Data).

+0

In der Tat müssen ihnen nicht die JDK Unterstützung für ältere Version fallen, weil sie leicht ihre eigene Version des Fakultativ implementieren könnten, wie das Guave-Team hat. Und Sie haben Recht, dass es wegen der massiven API-Änderungen auf einer neuen Hauptversion sein sollte. Aber ich denke, es lohnt sich wirklich. – marcelhaerle

+0

Sie können eine Feature-Anforderung in JIRA erstellen: https://jira.spring.io/browse/DATAMONGO – dunni