Aiuto con eccezioni personalizzate

di il
3 risposte

Aiuto con eccezioni personalizzate

Ciao a tutti. Stavo cercando di testare le eccezioni personalizzate in java.
Ho il seguente codice

public class prova{
   public static int[][] multiply(int[][] m1,int[][] m2){
      ....codice per prodotto matriciale...
      return result[][];}
Ora chiamando prova .multiply(m1,m2) se il numero di colonne di m1 è diverso dal numero di righe di m2 multiply , per le proprietà delle matrici , non può funzionare quindi vorrei fosse catturata una nuova eccezione NonCompatibleMatrices che stampi un messaggio , tipo "Le matrici non sono compatibili per il prodotto".

Da quello che ho capito , questo tipo di eccezione è checked essendo un inserimento errato dell'input, quindi estenderà Exceptions
public class NonCompatibleMatrices extends Exceptions{
...codice che mi manca...}
Se qualcuno mi può aiutare a cavarci una soluzione ne sarei grato.

3 Risposte

  • Re: Aiuto con eccezioni personalizzate

    davidebarbieri93 ha scritto:


    Da quello che ho capito , questo tipo di eccezione è checked essendo un inserimento errato dell'input, quindi estenderà Exceptions
    "nì" (sì e no). La differenza tra eccezioni "checked" e "unchecked" è fine e innanzitutto concettuale.
    Le eccezioni checked si definiscono e usano quando un problema/errore può davvero accadere, senza che questo denoti un "baco" del codice. IOException e derivati è checked, perché i problemi di I/O (che vanno da un file non trovato ad errori più gravi) è qualcosa che può realmente accadere e per cause esterne al programma.
    NullPointerException è unchecked perché innanzitutto può scatenarsi per qualunque accesso su un reference e poi comunque è una cosa che "non dovrebbe" accadere mai. Se accade allora generalmente è il sintomo di un baco/mancanza nel codice.

    Nel tuo caso, ovvero la discrepanza tra le matrici, la eccezione custom potrebbe essere tanto checked che unchecked. Se la fai checked, alla fin fine c'è un solo un "contratto" in più per il chiamante che dovrà per forza di cose considerarla.

    davidebarbieri93 ha scritto:


    public class NonCompatibleMatrices extends Exceptions{
    ...codice che mi manca...}
    Le eccezioni generalmente (salvo casi particolari) non hanno logica e neanche variabili di istanza.
    Basta scegliere quali costruttori replicare di quelli della superclasse e fare le invocazioni con super al supercostruttore.

    Guarda i sorgenti di IllegalArgumentException e IOException (dal OpenJDK):
    http://grepcode.com/file_/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/IllegalArgumentException.java/?v=source

    http://grepcode.com/file_/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/io/IOException.java/?v=source

    a parte commenti e il serialVersionUID è tutto lì .... una manciata di costruttori.
  • Re: Aiuto con eccezioni personalizzate

    Ciao Andrea , non riesco ad aprire i link che mi hai mandato , mi da 503 service unavailable
  • Re: Aiuto con eccezioni personalizzate

    I link sono corretti e funzionanti.

    Se hai un JDK Oracle installato, dovresti avere un src.zip (nella home di installazione). Guarda lì i sorgenti delle eccezioni.
Devi accedere o registrarti per scrivere nel forum
3 risposte