Leitfaden zu den Vorbedingungen von Guava

1. Übersicht

In diesem Tutorial zeigen wir Ihnen, wie Sie die Preconditions- Klasse von Google Guava verwenden .

Die Preconditions- Klasse enthält eine Liste statischer Methoden zum Überprüfen, ob eine Methode oder ein Konstruktor mit gültigen Parameterwerten aufgerufen wird. Wenn eine Vorbedingung fehlschlägt, wird eine maßgeschneiderte Ausnahme ausgelöst.

2. Die Voraussetzungen von Google Guava

Jede statische Methode in der Preconditions- Klasse hat drei Varianten:

  • Keine Argumente. Ausnahmen werden ohne Fehlermeldung ausgelöst
  • Ein zusätzliches Objektargument , das als Fehlermeldung fungiert. Ausnahmen werden mit einer Fehlermeldung ausgelöst
  • Ein zusätzliches String-Argument mit einer beliebigen Anzahl zusätzlicher Objektargumente , die als Fehlermeldung mit einem Platzhalter fungieren. Dies verhält sich ein bisschen wie printf , erlaubt jedoch aus Gründen der GWT-Kompatibilität und -Effizienz nur % s- Indikatoren

Schauen wir uns an, wie die Preconditions- Klasse verwendet wird.

2.1. Maven-Abhängigkeit

Beginnen wir mit dem Hinzufügen der Abhängigkeit der Guava-Bibliothek von Google in der Datei pom.xml :

 com.google.guava guava 29.0-jre 

Die neueste Version der Abhängigkeit kann hier überprüft werden.

3. checkArgument

Die Methode checkArgument der Preconditions-Klasse stellt die Richtigkeit der an die aufrufende Methode übergebenen Parameter sicher. Diese Methode akzeptiert eine boolesche Bedingung und löst eine IllegalArgumentException aus, wenn die Bedingung falsch ist.

Lassen Sie uns anhand einiger Beispiele sehen, wie wir diese Methode verwenden können.

3.1. Ohne Fehlermeldung

Wir können checkArgument verwenden, ohne zusätzliche Parameter an die checkArgument- Methode zu übergeben:

@Test public void whenCheckArgumentEvaluatesFalse_throwsException() { int age = -18; assertThatThrownBy(() -> Preconditions.checkArgument(age > 0)) .isInstanceOf(IllegalArgumentException.class) .hasMessage(null).hasNoCause(); }

3.2. Mit einer Fehlermeldung

Wir können eine aussagekräftige Fehlermeldung von der checkArgument- Methode erhalten, indem wir eine Fehlermeldung übergeben:

@Test public void givenErrorMsg_whenCheckArgEvalsFalse_throwsException() { int age = -18; String message = "Age can't be zero or less than zero."; assertThatThrownBy(() -> Preconditions.checkArgument(age > 0, message)) .isInstanceOf(IllegalArgumentException.class) .hasMessage(message).hasNoCause(); }

3.3. Mit einer Vorlagenfehlermeldung

Wir können eine aussagekräftige Fehlermeldung zusammen mit dynamischen Daten von der checkArgument- Methode erhalten, indem wir eine Fehlermeldung übergeben:

@Test public void givenTemplateMsg_whenCheckArgEvalsFalse_throwsException() { int age = -18; String message = "Age should be positive number, you supplied %s."; assertThatThrownBy( () -> Preconditions.checkArgument(age > 0, message, age)) .isInstanceOf(IllegalArgumentException.class) .hasMessage(message, age).hasNoCause(); } 

4. checkElementIndex

Die Methode checkElementIndex überprüft, ob ein Index ein gültiger Index in einer Liste, Zeichenfolge oder einem Array einer bestimmten Größe ist. Ein Elementindex kann von 0 einschließlich bis einschließlich Größe reichen. Sie übergeben eine Liste, einen String oder ein Array nicht direkt, sondern nur deren Größe. Diese Methode löst eine IndexOutOfBoundsException aus, wenn der Index kein gültiger Elementindex ist. Andernfalls wird ein Index zurückgegeben, der an die Methode übergeben wird.

Lassen Sie uns sehen, wie wir diese Methode verwenden können, indem wir eine aussagekräftige Fehlermeldung der checkElementIndex- Methode anzeigen , indem wir eine Fehlermeldung übergeben, wenn eine Ausnahme ausgelöst wird:

@Test public void givenArrayAndMsg_whenCheckElementEvalsFalse_throwsException() { int[] numbers = { 1, 2, 3, 4, 5 }; String message = "Please check the bound of an array and retry"; assertThatThrownBy(() -> Preconditions.checkElementIndex(6, numbers.length - 1, message)) .isInstanceOf(IndexOutOfBoundsException.class) .hasMessageStartingWith(message).hasNoCause(); }

5. checkNotNull

Die Methode checkNotNull prüft, ob ein als Parameter angegebener Wert null ist. Es gibt den überprüften Wert zurück. Wenn der Wert, der an diese Methode übergeben wurde, null ist, wird eine NullPointerException ausgelöst.

Als Nächstes zeigen wir, wie diese Methode verwendet wird, indem gezeigt wird, wie eine aussagekräftige Fehlermeldung von der checkNotNull- Methode durch Übergeben einer Fehlermeldung abgerufen wird:

@Test public void givenNullString_whenCheckNotNullWithMessage_throwsException () { String nullObject = null; String message = "Please check the Object supplied, its null!"; assertThatThrownBy(() -> Preconditions.checkNotNull(nullObject, message)) .isInstanceOf(NullPointerException.class) .hasMessage(message).hasNoCause(); }

Wir können auch eine aussagekräftige Fehlermeldung basierend auf dynamischen Daten von der checkNotNull- Methode erhalten, indem wir einen Parameter an die Fehlermeldung übergeben:

@Test public void whenCheckNotNullWithTemplateMessage_throwsException() { String nullObject = null; String message = "Please check the Object supplied, its %s!"; assertThatThrownBy( () -> Preconditions.checkNotNull(nullObject, message, new Object[] { null })) .isInstanceOf(NullPointerException.class) .hasMessage(message, nullObject).hasNoCause(); }

6. checkPositionIndex

Die Methode checkPositionIndex prüft, ob ein als Argument an diese Methode übergebener Index ein gültiger Index in einer Liste, Zeichenfolge oder einem Array einer bestimmten Größe ist. Ein Positionsindex kann von 0 einschließlich einschließlich bis einschließlich Größe reichen. Sie übergeben die Liste, Zeichenfolge oder das Array nicht direkt, sondern nur die Größe.

Diese Methode löst eine IndexOutOfBoundsException aus, wenn der übergebene Index nicht zwischen 0 und der angegebenen Größe liegt, andernfalls wird der Indexwert zurückgegeben.

Mal sehen, wie wir eine aussagekräftige Fehlermeldung von der checkPositionIndex- Methode erhalten können:

@Test public void givenArrayAndMsg_whenCheckPositionEvalsFalse_throwsException() { int[] numbers = { 1, 2, 3, 4, 5 }; String message = "Please check the bound of an array and retry"; assertThatThrownBy( () -> Preconditions.checkPositionIndex(6, numbers.length - 1, message)) .isInstanceOf(IndexOutOfBoundsException.class) .hasMessageStartingWith(message).hasNoCause(); }

7. checkState

Die Methode checkState überprüft die Gültigkeit des Status eines Objekts und ist nicht von den Methodenargumenten abhängig. Ein Iterator kann dies beispielsweise verwenden, um zu überprüfen, ob next vor einem zu entfernenden Aufruf aufgerufen wurde. Diese Methode löst eine IllegalStateException aus, wenn sich der Status eines Objekts (boolescher Wert, der als Argument an die Methode übergeben wird) in einem ungültigen Status befindet.

Lassen Sie uns sehen, wie wir diese Methode verwenden können, indem wir eine aussagekräftige Fehlermeldung der checkState- Methode anzeigen , indem wir eine Fehlermeldung übergeben, wenn eine Ausnahme ausgelöst wird:

@Test public void givenStatesAndMsg_whenCheckStateEvalsFalse_throwsException() { int[] validStates = { -1, 0, 1 }; int givenState = 10; String message = "You have entered an invalid state"; assertThatThrownBy( () -> Preconditions.checkState( Arrays.binarySearch(validStates, givenState) > 0, message)) .isInstanceOf(IllegalStateException.class) .hasMessageStartingWith(message).hasNoCause(); }

8. Fazit

In diesem Tutorial haben wir die Methoden der PreConditions- Klasse aus der Guava-Bibliothek veranschaulicht . Die Preconditions- Klasse bietet eine Sammlung statischer Methoden, mit denen überprüft wird, ob eine Methode oder ein Konstruktor mit gültigen Parameterwerten aufgerufen wird.

Der zu den obigen Beispielen gehörende Code befindet sich im GitHub-Projekt - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.