Ú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.