Leitfaden für die Vorkonditionen von Guava

Leitfaden für die Voraussetzungen von Guava

1. Überblick

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

Die KlassePreconditions 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. Preconditionsvon Google Guava

Jede statische Methode in der KlassePreconditionshat drei Varianten:

  • Keine Argumente. Ausnahmen werden ohne Fehlermeldung ausgegeben

  • Ein zusätzlichesObject-Argument, das als Fehlermeldung fungiert. Ausnahmen werden mit einer Fehlermeldung ausgelöst

  • Ein zusätzliches String-Argument mit einer beliebigen Anzahl zusätzlicherObject-Argumente, die als Fehlermeldung mit einem Platzhalter fungieren. Dies verhält sich ein bisschen wieprintf, aber für die GWT-Kompatibilität und -Effizienz sind nur%s-Indikatoren zulässig

Schauen wir uns an, wie die KlassePreconditionsverwendet wird.

2.1. Maven-Abhängigkeit

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


    com.google.guava
    guava
    21.0

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

3. checkArgument

The MethodecheckArgument derPreconditions class stellt die Richtigkeit der an die aufrufende Methode übergebenen Parameter sicher. Diese Methode akzeptiert eine boolesche Bedingung und löst einIllegalArgumentException 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önnencheckArgument verwenden, ohne zusätzliche Parameter an die MethodecheckArgument 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 dercheckArgument-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 dercheckArgument-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 MethodecheckElementIndex überprüft, ob ein Index ein gültiger Index in einer Liste, Zeichenfolge oder einem Array einer bestimmten Größe ist. Ein Elementindex kann zwischen 0 (einschließlich) und Größe (ausschließlich) liegen. Sie übergeben eine Liste, einen String oder ein Array nicht direkt, sondern nur deren Größe. Diese Methode gibt einIndexOutOfBoundsException 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 dercheckElementIndex-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 MethodecheckNotNull prüft, ob ein als Parameter angegebener Wert null ist. Es gibt den überprüften Wert zurück. Wenn der an diese Methode übergebene Wert null ist, wird einNullPointerException ausgelöst.

Als Nächstes zeigen wir, wie diese Methode verwendet wird, indem gezeigt wird, wie eine aussagekräftige Fehlermeldung von dercheckNotNull-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 dercheckNotNull-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 MethodecheckPositionIndex 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 einschließlich 0 bis einschließlich Größe reichen. Sie übergeben die Liste, Zeichenfolge oder das Array nicht direkt, sondern nur die Größe.

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

Mal sehen, wie wir mit der MethodecheckPositionIndexeine aussagekräftige Fehlermeldung 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 MethodecheckState überprüft die Gültigkeit des Status eines Objekts und ist nicht von den Methodenargumenten abhängig. Beispielsweise kann einIterator dies verwenden, um zu überprüfen, ob next vor einem zu entfernenden Aufruf aufgerufen wurde. Diese Methode löst einIllegalStateException 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 dercheckState-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 KlassePreConditionsaus der Guava-Bibliothek veranschaulicht. Die KlassePreconditions enthält 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 inthe GitHub project - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.