Gids voor de randvoorwaarden van Guava

1. Overzicht

In deze tutorial laten we zien hoe je de Google Guava's kunt gebruiken Randvoorwaarden klasse.

De Randvoorwaarden class biedt een lijst met statische methoden om te controleren of een methode of constructor wordt aangeroepen met geldige parameterwaarden. Als een voorwaarde mislukt, wordt een op maat gemaakte uitzondering gegenereerd.

2. Google Guava's Randvoorwaarden

Elke statische methode in het Randvoorwaarden klasse heeft drie varianten:

  • Geen argumenten. Uitzonderingen worden gegenereerd zonder een foutmelding
  • Een extra Voorwerp argument dat als een foutmelding fungeert. Uitzonderingen worden gegenereerd met een foutbericht
  • Een extra String-argument, met een willekeurig aantal extra Voorwerp argumenten die werken als een foutmelding met een tijdelijke aanduiding. Dit gedraagt ​​zich een beetje zoals printf, maar voor GWT-compatibiliteit en efficiëntie is het alleen mogelijk % s indicatoren

Laten we eens kijken hoe u de Randvoorwaarden klasse.

2.1. Afhankelijkheid van Maven

Laten we beginnen met het toevoegen van de Guava-bibliotheekafhankelijkheid van Google in het pom.xml:

 com.google.guava guave 29.0-jre 

De laatste versie van de afhankelijkheid kan hier worden gecontroleerd.

3. checkArgument

De methode checkArgument van de Randvoorwaarden klasse verzekert de waarheidsgetrouwheid van de parameters die aan de aanroepende methode worden doorgegeven. Deze methode accepteert een booleaanse voorwaarde en gooit een IllegalArgumentException wanneer de voorwaarde onwaar is.

Laten we eens kijken hoe we deze methode kunnen gebruiken met enkele voorbeelden.

3.1. Zonder een foutmelding

We kunnen gebruiken checkArgument zonder een extra parameter door te geven aan de checkArgument methode:

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

3.2. Met een foutmelding

We kunnen een betekenisvolle foutmelding krijgen van het checkArgument methode door een foutmelding door te geven:

@Test openbare ongeldige gegevenErrorMsg_whenCheckArgEvalsFalse_throwsException () {int age = -18; String message = "Leeftijd mag niet nul of minder dan nul zijn."; assertThatThrownBy (() -> Preconditions.checkArgument (leeftijd> 0, bericht)) .isInstanceOf (IllegalArgumentException.class) .hasMessage (bericht) .hasNoCause (); }

3.3. Met een sjabloonfoutbericht

We kunnen een zinvolle foutmelding krijgen samen met dynamische gegevens van het checkArgument methode door een foutmelding door te geven:

@ Test openbare ongeldig gegevenTemplateMsg_whenCheckArgEvalsFalse_throwsException () {int age = -18; String message = "Leeftijd moet een positief getal zijn, u heeft% s opgegeven."; assertThatThrownBy (() -> Preconditions.checkArgument (leeftijd> 0, bericht, leeftijd)) .isInstanceOf (IllegalArgumentException.class) .hasMessage (bericht, leeftijd) .hasNoCause (); } 

4. checkElementIndex

De methode checkElementIndex controleert of een index een geldige index is in een lijst, string of array met een gespecificeerde grootte. Een elementindex kan variëren van 0 inclusief tot grootte exclusief. U geeft een lijst, string of array niet rechtstreeks door, u geeft gewoon de grootte door. Deze methode gooit een IndexOutOfBoundsException als de index geen geldige elementindex is, retourneert het anders een index die aan de methode wordt doorgegeven.

Laten we eens kijken hoe we deze methode kunnen gebruiken door een zinvolle foutmelding van het checkElementIndex methode door een foutbericht door te geven wanneer het een uitzondering genereert:

@Test openbare ongeldige gegevenArrayAndMsg_whenCheckElementEvalsFalse_throwsException () {int [] getallen = {1, 2, 3, 4, 5}; String message = "Controleer de grens van een array en probeer het opnieuw"; assertThatThrownBy (() -> Preconditions.checkElementIndex (6, numbers.length - 1, bericht)) .isInstanceOf (IndexOutOfBoundsException.class) .hasMessageStartingWith (bericht) .hasNoCause (); }

5. checkNotNull

De methode checkNotNull controleert of een waarde die als parameter wordt opgegeven, null is. Het retourneert de waarde die is gecontroleerd. Als de waarde die aan deze methode is doorgegeven null is, dan is een NullPointerException wordt gegooid.

Vervolgens gaan we laten zien hoe u deze methode kunt gebruiken door te laten zien hoe u een zinvolle foutmelding krijgt van het checkNotNull methode door een foutmelding door te geven:

@Test openbare leegte gegevenNullString_whenCheckNotNullWithMessage_throwsException () {String nullObject = null; String message = "Controleer het opgegeven object, het is null!"; assertThatThrownBy (() -> Preconditions.checkNotNull (nullObject, bericht)) .isInstanceOf (NullPointerException.class) .hasMessage (bericht) .hasNoCause (); }

We kunnen ook een zinvolle foutmelding krijgen op basis van dynamische gegevens van het checkNotNull methode door een parameter door te geven aan het foutbericht:

@Test openbare leegte whenCheckNotNullWithTemplateMessage_throwsException () {String nullObject = null; String message = "Controleer alstublieft het geleverde Object, zijn% s!"; assertThatThrownBy (() -> Preconditions.checkNotNull (nullObject, bericht, nieuw object [] {null})) .isInstanceOf (NullPointerException.class) .hasMessage (bericht, nullObject) .hasNoCause (); }

6. checkPositionIndex

De methode checkPositionIndex controleert of een index die als argument aan deze methode wordt doorgegeven, een geldige index is in een lijst, string of array met een opgegeven grootte. Een positie-index kan variëren van 0 inclusief tot en met grootte. U geeft de lijst, tekenreeks of array niet rechtstreeks door, u geeft alleen de grootte door.

Deze methode gooit een IndexOutOfBoundsException als de doorgegeven index niet tussen 0 en de opgegeven grootte ligt, wordt de indexwaarde geretourneerd.

Laten we eens kijken hoe we een zinvolle foutmelding kunnen krijgen van het checkPositionIndex methode:

@Test openbare leegte gegevenArrayAndMsg_whenCheckPositionEvalsFalse_throwsException () {int [] getallen = {1, 2, 3, 4, 5}; String message = "Controleer de grens van een array en probeer het opnieuw"; assertThatThrownBy (() -> Preconditions.checkPositionIndex (6, numbers.length - 1, bericht)) .isInstanceOf (IndexOutOfBoundsException.class) .hasMessageStartingWith (bericht) .hasNoCause (); }

7. checkState

De methode checkState controleert de geldigheid van de toestand van een object en is niet afhankelijk van de methode-argumenten. Bijvoorbeeld een Iterator kan dit gebruiken om te controleren of next is aangeroepen voordat er een oproep is om te verwijderen. Deze methode gooit een IllegalStateException als de toestand van een object (booleaanse waarde die als argument aan de methode is doorgegeven) in een ongeldige staat verkeert.

Laten we eens kijken hoe we deze methode kunnen gebruiken door een zinvolle foutmelding van het checkState methode door een foutbericht door te geven wanneer het een uitzondering genereert:

@Test openbare ongeldige gegevenStatesAndMsg_whenCheckStateEvalsFalse_throwsException () {int [] validStates = {-1, 0, 1}; int gegevenState = 10; String message = "Je hebt een ongeldige status ingevoerd"; assertThatThrownBy (() -> Preconditions.checkState (Arrays.binarySearch (validStates, gegevenState)> 0, bericht)) .isInstanceOf (IllegalStateException.class) .hasMessageStartingWith (bericht) .hasNoCause (); }

8. Conclusie

In deze zelfstudie hebben we de methoden van de Randvoorwaarden klasse uit de Guava-bibliotheek. De Randvoorwaarden class biedt een verzameling statische methoden die worden gebruikt om te valideren dat een methode of constructor wordt aangeroepen met geldige parameterwaarden.

De code die bij de bovenstaande voorbeelden hoort, is te vinden in het GitHub-project - dit is een op Maven gebaseerd project, dus het zou gemakkelijk moeten kunnen worden geïmporteerd en uitgevoerd zoals het is.


$config[zx-auto] not found$config[zx-overlay] not found