Utilizarea afirmațiilor Java

1. Introducere

Cuvântul cheie Java asert permite dezvoltatorilor să verifice rapid anumite ipoteze sau starea unui program.

În acest articol, vom arunca o privire asupra modului de utilizare a cuvântului cheie Java asert .

2. Istoria afirmațiilor Java

Cuvântul cheie Java asert a fost introdus în Java 1.4, deci există de ceva vreme. Cu toate acestea, rămâne un cuvânt cheie puțin cunoscut care poate reduce drastic boilerplate și poate face codul nostru mai ușor de citit.

De exemplu, de multe ori în codul nostru trebuie să verificăm anumite condiții care ar putea împiedica funcționarea corectă a aplicației noastre. De obicei, am scrie ceva de genul acesta:

Connection conn = getConnection(); if(conn == null) { throw new RuntimeException("Connection is null"); }

Folosind afirmații putem elimina declarația if și throw cu o singură declarație asert .

3. Activarea afirmațiilor Java

Deoarece afirmațiile Java utilizează cuvântul cheie asert , nu sunt necesare biblioteci sau pachete de importat.

Rețineți că, înainte de Java 1.4, era perfect legal să folosiți cuvântul „afirmă” pentru numirea variabilelor, metodelor etc. Acest lucru creează potențial un conflict de denumire atunci când utilizați un cod mai vechi cu versiuni JVM mai noi.

Prin urmare, pentru compatibilitate inversă, JVM dezactivează în mod implicit validarea afirmării . Acestea trebuie activate în mod explicit folosind fie argumentul liniei de comandă -enableassertions , fie stenograma -ea:

java -ea com.baeldung.assertion.Assertion

În acest exemplu, am activat afirmații pentru toate clasele.

De asemenea, putem activa afirmații pentru pachete și clase specifice:

java -ea:com.baeldung.assertion... com.baeldung.assertion.Assertion

Aici am activat afirmații pentru toate clasele din pachetul com.baeldung.assertion .

La fel, pot fi dezactivate pentru pachete și clase specifice folosind argumentul liniei de comandă -disableassertions sau stenograma -da . De asemenea, putem folosi toate aceste patru argumente împreună.

4. Utilizarea afirmațiilor Java

Pentru a adăuga afirmații, pur și simplu utilizați cuvântul cheie afirmă și dați-i o condiție booleană :

public void setup() { Connection conn = getConnection(); assert conn != null; }

Java oferă, de asemenea, o a doua sintaxă pentru afirmații care ia un șir, care va fi utilizat pentru a construi AssertionError dacă unul este aruncat:

public void setup() { Connection conn = getConnection(); assert conn != null : "Connection is null"; }

În ambele cazuri, codul verifică dacă o conexiune la o resursă externă returnează o valoare non-nulă. Dacă valoarea respectivă este nulă, JVM va lansa automat un AssertionError .

În al doilea caz, excepția va avea detaliile suplimentare care vor apărea în urmărirea stivei și pot ajuta la depanarea problemei.

Să aruncăm o privire asupra rezultatului derulării clasei noastre cu afirmațiile activate:

Exception in thread "main" java.lang.AssertionError: Connection is null at com.baeldung.assertion.Assertion.setup(Assertion.java:15) at com.baeldung.assertion.Assertion.main(Assertion.java:10)

5. Manipularea unei erori AssertionError

Clasa AssertionError extinde Error , care însăși extinde Throwable . Aceasta înseamnă că AssertionError este o excepție necontrolată.

Prin urmare, metodele care utilizează afirmații nu sunt necesare pentru a le declara, iar codul de apel suplimentar nu ar trebui să încerce să le prindă.

AssertionErrors are menirea de a indica condiții irecuperabile într-o aplicație, așa că nu încercați niciodată să le gestionați sau să încercați recuperarea.

6. Cele mai bune practici

Cel mai important lucru de reținut despre afirmații este că pot fi dezactivate, deci nu presupuneți niciodată că vor fi executate .

Prin urmare, țineți cont de următoarele lucruri atunci când utilizați afirmații:

  • Verificați întotdeauna dacă există valori nule și Opționale goale, acolo unde este cazul
  • Evitați să folosiți afirmații pentru a verifica intrările într-o metodă publică și utilizați în schimb o excepție necontrolată, cum ar fi IllegalArgumentException sau NullPointerException
  • Nu apelați metode în condiții de afirmare și, în schimb, atribuiți rezultatul metodei unei variabile locale și utilizați acea variabilă cu assert
  • Afirmațiile sunt excelente pentru locurile din cod care nu vor fi executate niciodată, cum ar fi cazul implicit al unei instrucțiuni switch sau după o buclă care nu se termină niciodată

7. Concluzie

Cuvântul cheie Java afirmă este disponibil de mulți ani, dar rămâne o caracteristică puțin cunoscută a limbajului. Poate ajuta la eliminarea multor coduri din boilerplate, poate face codul mai lizibil și poate ajuta la identificarea erorilor la începutul dezvoltării programului.

Rețineți că afirmațiile nu sunt activate în mod implicit, deci nu presupuneți niciodată că vor fi executate atunci când sunt utilizate în cod.

Ca întotdeauna, codul sursă complet este disponibil pe GitHub.