Warum @NonNull
Annotation bei der Rückgabe Optional
hinzufügen?Kommentieren Sie Funktionen, die optional mit @NonNull zurückgeben?
public Optional<Integer> getInt() {
return Optional.ofNullable(localInteger);
}
Vs
@NonNull
public Optional<Integer> getInt() {
return Optional.ofNullable(localInteger);
}
Basierend auf diesem Artikel: http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html Mein Verständnis von Optional
mit diesem Artikel ist, dass der ganze Sinn der Optional
zu versuchen und zu verhindern, für null
in Code überprüft und dass, wenn ein Funktion kann null
zurückgeben es wird stattdessen Optional
zurückgeben, um den Anrufer zu zwingen, zu überprüfen, ob es isPresent
ist.
Ich habe da gelernt, dass es Probleme mit Optional<Map>
hier beschrieben: https://developer.atlassian.com/blog/2015/08/optional-broken
So Hinzufügen @NonNull
für Optional scheint zusätzliche Klarheit an den Anrufer hinzuzufügen, wenn eine Karte Art Rückkehr, aber diese Klarheit für alle Funktionen erforderlich ist, die Rückkehr irgendwelche Optional
Art?
public Optional<Integer> getInt() {
return null;
}
ist so schlecht, wie
@NonNull
public Integer getInt() {
return null;
}
Bin ich denke richtig, dass es eine schlechte Praxis ist null
zu zurückkehren, wenn der Rückgabetyp Optional
ist? (Mit Ausnahme der oben erwähnten Karte Fall, oder weil es einen Fall gibt, wo null
gültig ist, sollten Sie immer @NonNull
hinzufügen?)
Fazit Mein Fazit bisher nicht @NonNull
hinzuzufügen, wenn Optional
zurückkehren und, wenn es sein kann, null
dann mit @Nullable
oder noch besser kommentieren, geben Sie keinen Optional
Typ zurück.
Können Sie erklären, wann es _ever_ korrekt sein würde, eine Null zurückzugeben, anstatt ein "leeres" zurückzugeben. Optional? –
Wenn Sie versprechen, 'Optional' zurückzugeben, aber null zurückgibt, brechen Sie Ihren Vertrag. Gib einfach nicht 'null' zurück und gib 'Optional.empty()' zurück. Es sind keine zusätzlichen Anmerkungen erforderlich. – dehasi
@DaleWilson, siehe den fraglichen Link developer.atlassic für eine detaillierte Antwort auf wann. –