Använda Java-påståenden

1. Introduktion

Med Java assert- nyckelordet kan utvecklare snabbt verifiera vissa antaganden eller tillstånd för ett program.

I den här artikeln, tar vi en titt på hur man använder Java hävda sökord.

2. Historik över Java-påståenden

Java assert- nyckelordet introducerades i Java 1.4, så det har funnits ganska länge. Det är dock ett lite känt nyckelord som drastiskt kan minska pannplattan och göra vår kod mer läsbar.

Till exempel behöver vi ofta i vår kod verifiera vissa villkor som kan förhindra att vår applikation fungerar korrekt. Vanligtvis skulle vi skriva något så här:

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

Genom att använda påståenden kan vi ta bort om och kasta uttalande med en enda hävda uttalande.

3. Aktivera Java-påståenden

Eftersom Java påståenden använder hävda sökord, det finns inga bibliotek som behövs eller paket att importera.

Observera att före Java 1.4 var det helt lagligt att använda ordet "assert" för namngivning av variabler, metoder etc. Detta skapar potentiellt ett namnkollision när man använder en äldre kod med nyare JVM-versioner.

Därför, för bakåtkompatibilitet, inaktiverar JVM standardvalidering . De måste aktiveras uttryckligen med antingen kommandoradsargumentet -enableassertions eller dess förkortning -ea:

java -ea com.baeldung.assertion.Assertion

I det här exemplet har vi aktiverat påståenden för alla klasser.

Vi kan också aktivera påståenden för specifika paket och klasser:

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

Här har vi aktiverat påståenden för alla klasser i paketet com.baeldung.assertion .

På samma sätt kan de inaktiveras för specifika paket och klasser med kommandoradsargumentet -disableassertions eller dess stenografi -da . Vi kan också använda alla dessa fyra argument tillsammans.

4. Använda Java-påståenden

För att lägga till påståenden, helt enkelt använda hävda sökord och ge det en boolean villkor :

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

Java ger också en andra syntax för påståenden som tar en sträng, som kommer att användas för att konstruera AssertionError om en kastas:

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

I båda fallen kontrollerar koden att en anslutning till en extern resurs returnerar ett icke-nollvärde. Om det värdet är null, kommer JVM automatiskt att kasta en AssertionError .

I det andra fallet kommer undantaget att ha den extra detalj som kommer att visas i stapelspåret och kan hjälpa till att felsöka problemet.

Låt oss ta en titt på resultatet av att köra vår klass med påståenden aktiverade:

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. Hantering av ett påståendefel

Klassen AssertionError utökar Error , vilket i sig utökar Throwable . Detta betyder att AssertionError är ett okontrollerat undantag.

Därför krävs inte metoder som använder påståenden för att deklarera dem, och ytterligare ringkod bör inte försöka fånga dem.

AssertionErrors är avsedda att indikera oåterhämtningsbara förhållanden i en applikation, så försök aldrig hantera dem eller försök att återställa.

6. Bästa praxis

Det viktigaste att komma ihåg om påståenden är att de kan inaktiveras, så antag aldrig att de kommer att köras .

Tänk därför på följande saker när du använder påståenden:

  • Sök alltid efter nollvärden och tomma tillval där det är lämpligt
  • Undvik att använda påståenden för att kontrollera ingångar till en offentlig metod och använd istället ett okontrollerat undantag som IllegalArgumentException eller NullPointerException
  • Ring inte metoder under påståendeförhållanden och tilldela istället resultatet av metoden till en lokal variabel och använd variabeln med assert
  • Påståenden är bra för platser i koden som aldrig kommer att exekveras, till exempel standardfallet för ett switch- uttalande eller efter en loop som aldrig avslutas

7. Slutsats

Java assert- nyckelordet har funnits i många år men är fortfarande lite känt för språket. Det kan hjälpa till att ta bort massor av pannkodskod, göra koden mer läsbar och hjälpa till att identifiera buggar tidigt i programutvecklingen.

Kom bara ihåg att påståenden inte är aktiverade som standard, så antag aldrig att de kommer att köras när de används i koden.

Som alltid är hela källkoden tillgänglig på GitHub.