English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Come gestire automaticamente IllegalArgumentException all'interno di una condizione 'if' in Java?

Ogni volta che passi un parametro inappropriato al metodo o al costruttore, viene sollevata un'IllegalStateException. E' un'eccezione di runtime, quindi non e' necessario gestirla durante la compilazione.

Esempio

valueOf()Il metodo della classe java.sql.Date accetta un formato di escape JDBCyyyy- [m] m- [d] dRappresenta una stringa di data e la trasforma in un oggetto java.sql.Date.

import java.sql.Date;
import java.util.Scanner;
public class IllegalArgumentExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Inserisci la tua data di nascita nel formato di escape JDBC (yyyy-mm-dd)");
      String dateString = sc.next();
      Date date = Date.valueOf(dateString);
      System.out.println("Given date converted int to an object: "+date);
   }
}

Risultato di output

Inserisci la tua data di nascita nel formato di escape JDBC (aaaa-mm-gg)
1989-09-26
Data convertita in un oggetto: 1989-09-26

Ma se passi una stringa date in qualsiasi altro formato, questo metodo solleva un'IllegalStateException.

import java.sql.Date;
import java.util.Scanner;
public class IllegalArgumentExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Inserisci la tua data di nascita nel formato di escape JDBC (yyyy-mm-dd)");
      String dateString = sc.next();
      Date date = Date.valueOf(dateString);
      System.out.println("Given date converted int to an object: "+date);
   }
}

Eccezione di runtime

Inserisci la tua data di nascita nel formato di escape JDBC (aaaa-mm-gg)
26-07-1989
Exception in thread "main" java.lang.IllegalArgumentException
   at java.sql.Date.valueOf(Unknown Source)
   at july_ipoindi.NextElementExample.main(NextElementExample.java:11)
Nel seguente esempio Java, il costruttore Date (effettivamente deprecato) accetta

Esempio

setPriority()I metodi della classe Thread accettano un valore intero che rappresenta la priorità della thread e lo impostano come thread corrente. Tuttavia, il valore passato a questo metodo dovrebbe essere inferiore alla priorità massima della thread; altrimenti, questo metodo solleveràIllegalArgumentException

public class IllegalArgumentExample {
   public static void main(String args[]) {
      Thread thread = new Thread();
      System.out.println(thread.MAX_PRIORITY);
      thread.setPriority(12);
   }
}

Eccezione di runtime

10Exception in thread "main"
java.lang.IllegalArgumentException
   at java.lang.Thread.setPriority(Unknown Source)
   at july_ipoindi.NextElementExample.main(NextElementExample.java:6)

Gestione di IllegalArgumentException in condizione if

Quando si utilizza un metodo che causa IllegalArgumentException, poiché si conoscono i parametri validi, è possibile utilizzare in anticipo una condizione if per limitare/verificare i parametri e evitare l'eccezione.

Esempio

import java.util.Scanner;
public class IllegalArgumentExample {
   public static void main(String args[]) {
      Thread thread = new Thread();
      System.out.println("Inserisci il valore della priorità del thread: ");
      Scanner sc = new Scanner(System.in);
      int priority = sc.nextInt();
      if(priority<=Thread.MAX_PRIORITY) {
         thread.setPriority(priority);
      }
         System.out.println("Il valore della priorità della priorità deve essere inferiore a: " + Thread.MAX_PRIORITY);
      }
   }
}

Risultato di output

Inserisci il valore della priorità del thread:
15
Il valore della priorità della priorità deve essere inferiore a: 10
Ti potrebbe interessare