2017-01-27 22 views
5

Javadoc dla Preconditions z państw biblioteki Guava Google, że:Dlaczego nie należy używać Objects.requireNonNull(), jeśli używane jest com.google.common z Guava?

Projekty wykorzystujące com.google.common powinna generalnie unikać stosowania Objects.requireNonNull(Object). Zamiast tego użyj tego, co odpowiada checkNotNull(Object) lub Verify.verifyNotNull(Object), które jest odpowiednie dla sytuacji. (To samo dotyczy przeciążania wiadomości.)

Jaka jest motywacja tego zalecenia? Nie mogę znaleźć żadnego w Javadoc.

Mam na myśli, że robią prawie to samo iw tych przypadkach zwykle lepiej jest używać standardowego interfejsu API (na przykład ludzie odpowiedzialni za Joda-Time zalecają teraz użytkownikom korzystanie z java.time, co powoduje ich deprecjonowanie; struktura).

Jako przykład, te dwa rzędy walidacji wejścia zrobić to samo:

class PreconditionsExample { 
    private String string; 

    public PreconditionsExample(String string) { 
    this.string = Objects.requireNonNull(string, "string must not be null"); 
    this.string = Preconditions.checkNotNull(string, "string must not be null"); 
    } 
} 

Odpowiedz

4

wersja Guava oferuje szereg przeciążeń, które akceptują ciąg formatu i argumenty. Aby zacytować szablon:

Preferowaliśmy przewijać własne sprawdzenia warunków wstępnych porównywalne narzędzia z Apache Commons z kilku powodów. W skrócie:

...

  • Prosty, varargs "printf stylu" komunikaty o wyjątkach. (Ta zaleta jest również dlatego zalecamy w dalszym ciągu korzystać z checkNotNull nad Objects.requireNonNull wprowadzony w JDK 7)
+0

Ah, widzę! Byłbym skłonny krótko o tym wspomnieć w Javadocs. Rozumiem, ale wydaje mi się, że możesz poprawić swoją odpowiedź jeszcze bardziej, dodając przykład, w którym 'Objects.requireNonNull()' nie jest wystarczający. – Magnilex

2

AFAIK,

  1. Dla spójności
  2. Dla dodatkowego sposobu prowadzenia następujących,

    String world = "world"; Preconditions.checkNotNull(string, "Hello %s",world);

Z obiektami musisz użyć String.format. Co więcej, implementacja obu metod jest taka sama.