2017-11-08 2 views
0

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.

+0

Können Sie erklären, wann es _ever_ korrekt sein würde, eine Null zurückzugeben, anstatt ein "leeres" zurückzugeben. Optional? –

+3

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

+0

@DaleWilson, siehe den fraglichen Link developer.atlassic für eine detaillierte Antwort auf wann. –

Antwort

0

Vielen Dank für Ihre Kommentare. Es scheint, dass mein Verständnis mit den Kommentaren übereinstimmt.

null Rückkehr, wenn Optional wird „verspricht“ scheint allgemein als schlecht akzeptiert zu werden.

Ich stimme völlig zu, basierend auf dem Zweck, für den die Option entwickelt wurde.

jedoch ... Wir haben eine besondere Note in unserer Gesellschaft docs zu machen hatte null für diese aufgrund der fehlenden Dokumentation in Optional macht es ausdrücklich klar, dass Sie nicht zurück, wenn ein Optional zurück.

Verwandte Themen