2016-01-07 6 views
7

Die Dokumentation für Guava Preconditions Hinweise:java.util.Objects.requireNonNull vs Preconditions.checkNotNull

Projekte, die com.google.common verwenden sollte die Verwendung von Objects.requireNonNull(Object) generell vermeiden. Verwenden Sie statt dessen die Situation checkNotNull(Object) oder Verify.verifyNotNull(Object) zu . (Das gleiche gilt für die Nachrichten akzeptierenden Überladungen.)

Kann jemand die Beweggründe für diesen Vorschlag erklären?

Ist es für den Zweck der Konsistenz oder ist etwas grundlegend falsch mit der Implementierung von Objects.requireNonNull?

Antwort

9

Es ist nur für die Konsistenz. Die Implementierungen sind gleich.

+0

Direkt von der Quelle. Vielen Dank! – vpiTriumph

5

Obwohl aus dem Beispiel in der Frage scheint es, dass OP speziell über die besondere Form der checkNotNull fragt, ist es ein subtiler Unterschied in der Regel zugunsten der checkNotNull verwendet, die reflektiert wird, in dem printf Stil Form varargs. Zum Beispiel Guava Preconditions verwenden Sie können sich bilden:

public void getInput(String companyName) { 
    String context = "Google"; 
    String moreContext = "Facebook"; 
    checkNotNull(companyName, "Why not try %s or %s", context, moreContext); 
} 

mit Objects.requireNonNull werden Sie so etwas wie

public void getInput(String companyName) { 
    String context = "Google"; 
    String moreContext = "Facebook"; 
    checkNotNull(companyName, "Why not try " + context + " or " + moreContext); 
} 

Referenz zu tun haben: Siehe Unterteil Preconditions Explained

Einfach, varargs „printf "Ausnahmemeldungen". (Dieser Vorteil ist auch, warum wir empfehlen weiterhin checkNotNull über Objects.requireNonNull zu verwenden, in JDK 7 eingeführt)

EDIT: Eine Sache, obwohl zu beachten ist, dass alle Argumente an die errorMessageTemplate umgewandelt werden zu String mit String.valueOf(arg) so Sie können nur% s und nicht andere Spezifizierer wie% d oder% f usw. verwenden.

+0

Dies ist eine solide Ergänzung und sollte unbedingt berücksichtigt werden, wenn Guava-Vorbedingungen über Java 'requireNotNull' ebenfalls ausgewählt werden. – vpiTriumph