Repository 32bit  Forum
Repository 64bit  Wiki

[JAVA] Eccezioni: chiarimenti [RISOLTO]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[JAVA] Eccezioni: chiarimenti [RISOLTO]

Messaggioda Blallo » mar gen 31, 2012 19:46

Sto svolgendo un'esercitazione di Java e mi trovo davanti delle eccezioni throwable.
Spulciando la soluzione (è un programma abbastanza semplice) ho cercato di capire qualcosa su come si gestiscono le eccezioni.
In questi due metodi gestisce l'eccezione così:
Codice: Seleziona tutto
  public Persona getPersona(String cf) throws ErrPersonaInesistente {
   Persona p = persone.get(cf);
    if (p == null)
      throw new ErrPersonaInesistente();
    return p;
  }

Stessa cosa qui:
Codice: Seleziona tutto
  public Medico getMedico(String matricola) throws ErrMedicoInesistente {
    if(!medici.containsKey(matricola)){
       throw new ErrMedicoInesistente();
    }
    return medici.get(matricola);
  }

e fin qui tutto fila.
Ma allora perché in questo metodo
Codice: Seleziona tutto
  public void assegnaMedico(String matricola, String cf)
    throws ErrPersonaInesistente, ErrMedicoInesistente {
    Dottore m = (Dottore) getMedico(matricola);
    Paziente p = (Paziente) getPersona(cf);
    m.addPaziente(p);
    p.setMedico(m);
  }

non vengono messi i controlli, con conseguenti "throw new" ecc ecc?
Sarà che sono abituato al C, ma non ci sto capendo una fava secca :)

Grazie a tutti in anticipo.
Ultima modifica di Blallo il mer feb 01, 2012 21:59, modificato 1 volta in totale.
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3234
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: [JAVA] Eccezioni: chiarimenti

Messaggioda Ansa89 » mar gen 31, 2012 19:56

Nell'ultimo metodo usi i due metodi precedenti e sono loro che sollevano le eccezioni, quindi non hai bisogno di fare altri controlli.
(Spero di essermi spiegato bene).
Avatar utente
Ansa89
Iper Master
Iper Master
 
Messaggi: 2623
Iscritto il: mer ago 29, 2007 16:57
Località: Modena
Nome Cognome: Stefano Ansaloni
Slackware: 13.1
Kernel: 3.16.1-ck1
Desktop: XFCE 4.6.1

Re: [JAVA] Eccezioni: chiarimenti

Messaggioda 414N » mar gen 31, 2012 20:01

Per come ho capito il codice, le due eccezioni (che da qualche parte saranno definite come classi derivate da Exception) vengono generate dai due metodi "getter" (getPersona e getMedico) mentre il metodo assegnaMedico si limita a rilanciarle al proprio chiamante qualora una qualsiasi di esse venisse lanciata da un getter.
Sarà poi il chiamante del metodo assegnaMedico a dover gestire le possibili eccezioni che possono essere lanciate (tramite try/catch) oppure rilanciarle verso l'alto.
PS: nota che il metodo assegnaMedico non controlla che le istanze resituite dagli altri due metodi get siano effettivamente un Dottore e un Paziente (basta controllare tramite l'operatore instanceof), ma ne fa il cast direttamente. Questo può causare una ClassCastException (non dichiarata nella signature di assegnaMedico).
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2882
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [JAVA] Eccezioni: chiarimenti

Messaggioda Blallo » mer feb 01, 2012 21:58

Grazie a tutti e due, chiarissimi!
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3234
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: [JAVA] Eccezioni: chiarimenti

Messaggioda Vic Steele » gio feb 02, 2012 21:35

414N ha scritto:PS: nota che il metodo assegnaMedico non controlla che le istanze resituite dagli altri due metodi get siano effettivamente un Dottore e un Paziente (basta controllare tramite l'operatore instanceof), ma ne fa il cast direttamente. Questo può causare una ClassCastException (non dichiarata nella signature di assegnaMedico).

Non possiamo dirlo dal solo codice che ha postato, per esempio non c'è bisogno se la struttura dati è tipata genericamente (es.: ArrayList<Medico>, o in questo caso HashMap<String, Medico> dato che ha usato containsKey).
Vic Steele
Linux 2.6
Linux 2.6
 
Messaggi: 534
Iscritto il: dom apr 27, 2008 12:46
Località: Potenza
Nome Cognome: Luigi Caiazza
Slackware: current x86_64
Kernel: 3.0.0
Desktop: Fluxbox / KDE 4.7.0
Distribuzione: Fedora 15

Re: [JAVA] Eccezioni: chiarimenti

Messaggioda 414N » ven feb 03, 2012 9:32

Vic Steele ha scritto:
414N ha scritto:PS: nota che il metodo assegnaMedico non controlla che le istanze resituite dagli altri due metodi get siano effettivamente un Dottore e un Paziente (basta controllare tramite l'operatore instanceof), ma ne fa il cast direttamente. Questo può causare una ClassCastException (non dichiarata nella signature di assegnaMedico).

Non possiamo dirlo dal solo codice che ha postato, per esempio non c'è bisogno se la struttura dati è tipata genericamente (es.: ArrayList<Medico>, o in questo caso HashMap<String, Medico> dato che ha usato containsKey).

Se fosse come dici, il cast a Dottore e Paziente in assegnaMedico sarebbe inutile in entrambi i casi, disponendo di una collezione tipata genericamente.
Dal codice dei due metodi getter si può dedurre che le collezioni sottostanti (probabilmente di tipo Map come giustamente affermato da te) siano dichiarate come collezioni di Persona e Medico e non di Paziente e Dottore (che saranno, quasi sicuramente, sottoclassi delle due precedenti).
Basta che in una delle due collezioni ci finisca o una Persona o un Medico (sempre che non siano classi astratte) e il metodo assegnaMedico lancerà una ClassCastException.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2882
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [JAVA] Eccezioni: chiarimenti

Messaggioda Blallo » ven feb 03, 2012 11:13

414N ha scritto:Basta che in una delle due collezioni ci finisca o una Persona o un Medico (sempre che non siano classi astratte) e il metodo assegnaMedico lancerà una ClassCastException.

In effetti Persona e Medico sono interfacce :)
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3234
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: [JAVA] Eccezioni: chiarimenti

Messaggioda 414N » sab feb 04, 2012 12:34

jimmy_page_89 ha scritto:In effetti Persona e Medico sono interfacce :)

CVD ;)
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2882
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti

cron