Útmutató Guava előfeltételeihez

1. Áttekintés

Ebben az oktatóanyagban megmutatjuk, hogyan kell használni a Google Guava programot Előfeltételek osztály.

A Előfeltételek Az osztály tartalmazza a statikus módszerek listáját annak ellenőrzésére, hogy egy metódust vagy konstruktort érvényes paraméterértékekkel hívtak-e meg. Ha egy előfeltétel kudarcot vall, akkor egy személyre szabott kivételt dobunk.

2. Google Guava's Előfeltételek

Minden statikus módszer a Előfeltételek osztálynak három változata van:

  • Nincsenek érvek. A kivételeket hibaüzenet nélkül dobják fel
  • Egy extra Tárgy hibaüzenetként működő argumentum. A kivételeket hibaüzenettel dobják fel
  • Extra String argumentum, tetszőleges számú kiegészítővel Tárgy a helyőrzővel hibaüzenetként működő argumentumok. Ez kicsit úgy viselkedik printf, de a GWT kompatibilitás és hatékonyság érdekében csak megengedi % s mutatók

Vessünk egy pillantást a Előfeltételek osztály.

2.1. Maven-függőség

Kezdjük azzal, hogy hozzáadjuk a Google Guava könyvtárfüggőségét a pom.xml:

 com.google.guava guava 29.0-jre 

A függőség legfrissebb verziója itt ellenőrizhető.

3. checkArgument

A módszer checkArgument a Előfeltételek osztály biztosítja a hívási módszerhez továbbított paraméterek valóságtartalmát. Ez a módszer elfogadja a logikai feltételeket és egy IllegalArgumentException amikor a feltétel hamis.

Nézzük meg, hogyan használhatjuk ezt a módszert néhány példával.

3.1. Hibaüzenet nélkül

Tudjuk használni checkArgument anélkül, hogy bármilyen további paramétert átadna a checkArgument módszer:

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

3.2. Hibaüzenettel

Értelmes hibaüzenetet kaphatunk a checkArgument módszer hibaüzenet továbbításával:

@Test public void givenErrorMsg_whenCheckArgEvalsFalse_throwsException () {int age = -18; String message = "Az életkor nem lehet nulla vagy kevesebb, mint nulla."; assertThatThrownBy (() -> Preconditions.checkArgument (életkor> 0, üzenet)) .isInstanceOf (IllegalArgumentException.class) .hasMessage (üzenet) .hasNoCause (); }

3.3. Sablon hibaüzenettel

Jelentős hibaüzenetet kaphatunk a dinamikus adatokkal együtt a checkArgument módszer hibaüzenet továbbításával:

@Test public void givenTemplateMsg_whenCheckArgEvalsFalse_throwsException () {int age = -18; String üzenet = "Az életkornak pozitív számnak kell lennie,% s értéket adott meg."; assertThatThrownBy (() -> Preconditions.checkArgument (életkor> 0, üzenet, életkor)) .isInstanceOf (IllegalArgumentException.class) .hasMessage (üzenet, életkor) .hasNoCause (); } 

4. checkElementIndex

A módszer, a metódus checkElementIndex ellenőrzi, hogy egy index érvényes index-e egy listában, karakterláncban vagy egy meghatározott méretű tömbben. Az elemindex a 0-tól a méretig terjedhet. Nem ad át közvetlenül egy listát, karakterláncot vagy tömböt, csak átadja annak méretét. Ez a módszer egy IndexOutOfBoundsException ha az index nem érvényes elemindex, akkor a metódusnak átadott indexet adja vissza.

Nézzük meg, hogyan használhatjuk ezt a módszert azáltal, hogy értelmes hibaüzenetet jelenítünk meg a checkElementIndex módszer hibaüzenet továbbításával, amikor kivételt dob:

@Test public void givenArrayAndMsg_whenCheckElementEvalsFalse_throwsException () {int [] számok = {1, 2, 3, 4, 5}; String message = "Kérjük, ellenőrizze a tömb kötését és próbálkozzon újra"; assertThatThrownBy (() -> Preconditions.checkElementIndex (6, számok.hossz - 1, üzenet)) .isInstanceOf (IndexOutOfBoundsException.class) .hasMessageStartingWith (message) .hasNoCause (); }

5. checkNotNull

A módszer, a metódus checkNotNull ellenőrzi, hogy a paraméterként megadott érték nulla-e. Visszaadja az ellenőrzött értéket. Ha a metódusnak átadott érték nulla, akkor a NullPointerException dobják.

Ezután bemutatjuk, hogyan kell használni ezt a módszert, bemutatva, hogyan lehet értelmes hibaüzenetet kapni a checkNotNull módszer hibaüzenet továbbításával:

@Test public void givenNullString_whenCheckNotNullWithMessage_throwsException () {String nullObject = null; String message = "Kérjük, ellenőrizze a szállított objektumot, annak nullát!"; assertThatThrownBy (() -> Preconditions.checkNotNull (nullObject, message)) .isInstanceOf (NullPointerException.class) .hasMessage (message) .hasNoCause (); }

A dinamikus adatok alapján értelmes hibaüzenetet is kaphatunk a checkNotNull metódus egy paraméter átadásával a hibaüzenethez:

@Test public void whenCheckNotNullWithTemplateMessage_throwsException () {String nullObject = null; String message = "Kérjük, ellenőrizze a szállított objektumot, annak% s!"; assertThatThrownBy (() -> Preconditions.checkNotNull (nullObject, message, new Object [] {null})) .isInstanceOf (NullPointerException.class) .hasMessage (message, nullObject) .hasNoCause (); }

6. checkPositionIndex

A módszer, a metódus checkPositionIndex ellenőrzi, hogy a metódus argumentumaként átadott index érvényes index-e egy megadott méretű listában, karakterláncban vagy tömbben. A pozícióindex a 0-tól a méretig terjedhet. Nem adja át közvetlenül a listát, karakterláncot vagy tömböt, csak átadja annak méretét.

Ez a módszer egy IndexOutOfBoundsException ha az átadott index nem 0 és a megadott méret között van, akkor az index értékét adja vissza.

Nézzük meg, hogyan kaphatunk értelmes hibaüzenetet a checkPositionIndex módszer:

@Test public void givenArrayAndMsg_whenCheckPositionEvalsFalse_throwsException () {int [] számok = {1, 2, 3, 4, 5}; String message = "Kérjük, ellenőrizze a tömb kötését és próbálkozzon újra"; assertThatThrownBy (() -> Preconditions.checkPositionIndex (6, számok.hossz - 1, üzenet)) .isInstanceOf (IndexOutOfBoundsException.class) .hasMessageStartingWith (message) .hasNoCause (); }

7. checkState

A módszer, a metódus checkState ellenőrzi az objektum állapotának érvényességét, és nem függ a metódus argumentumaitól. Például egy Iterátor használhatja ezt annak ellenőrzésére, hogy az eltávolítás előtt hívást kezdeményezett-e. Ez a módszer egy IllegalStateException ha egy objektum állapota (logikai érték, amelyet argumentumként adunk át a metódusnak) érvénytelen állapotban van.

Nézzük meg, hogyan használhatjuk ezt a módszert azáltal, hogy értelmes hibaüzenetet jelenítünk meg a checkState módszer hibaüzenet továbbításával, amikor kivételt dob:

@Test public void givenStatesAndMsg_whenCheckStateEvalsFalse_throwsException () {int [] validStates = {-1, 0, 1}; int megadottállapot = 10; String message = "Érvénytelen állapotot adott meg"; assertThatThrownBy (() -> Preconditions.checkState (Arrays.binarySearch (validStates, givenState)> 0, üzenet)) .isInstanceOf (IllegalStateException.class) .hasMessageStartingWith (message) .hasNoCause (); }

8. Következtetés

Ebben az oktatóanyagban bemutattuk a Előfeltételek osztály a guavai könyvtárból. A Előfeltételek osztály olyan statikus módszerek gyűjteményét nyújtja, amelyek segítségével ellenőrizhető, hogy egy metódust vagy konstruktort érvényes paraméterértékekkel hívnak-e meg.

A fenti példákhoz tartozó kód megtalálható a GitHub projektben - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.