Newsgroup: it.comp.java
Titolo: Eccezione non trovata

Stavo vendendo la documentazione dell'API collections, e mi sono
soffermato sull'interfaccia diciamo cosi "caridine" di questo
framework ovvero l'interfaccia Collection(). In questa ho notato il
metodo contains() ( 
http://java.sun.com/javase/6/docs/api/java/util/Collection.html#contains(java.lang.Object)
) e ho visto che lancia due eccezioni ClassCastException e
NullPointerException ma ho visto un paio di classi che implementano
Collection (o meglio che estendono classi che implementano parte di
Collection) ma non ho trovato nessun metodo contains() che lancia
queste eccezioni.
Qualcuno sa se qualche classe che ha un contains() che lancia almeno
una di queste eccezioni?
Sono nuovo a guardare la documentazione e forse qualcosa mi è
sfuggito...grazie.

ari...@tiscali.it
 ha scritto:

Ti manca qualche pezzo...
ClassCastException e NullPointerException derivano da RuntimeException; 
nel linguaggio java le RuntimeException sono eccezioni che non è 
obbligatorio intercettare (il compilatore non si fermase la chiamata al 
metodo non è all'interno di un blocco try).
Non è neanche obbligatorio dichiarare che si "lancia" una 
RuntimeException da un metodo tramite l'istruzione throws ad esempio i 
seguenti 2 metodi sono identici come comportamento e come correttezza a 
livello di compilatore:
public class A1 {
   public void mioMetodo() {
     throw new NullPointerException();
   }
}
public class A2 {
   public void mioMetodo()  throws NullPointerException {
     throw new NullPointerException();
   }
}
Una sottoclasse che volesse estendere A2 potrebbe validamente scrivere 
il proprio metodo in uno dei seguenti 2 modi:
public class B1 extends A2 {
   public void mioMetodo() {
     throw new NullPointerException("Lanciata da B1");
   }
}
public class B1 extends A2 {
   public void mioMetodo()  throws NullPointerException {
     throw new NullPointerException("Lanciata da B1");
   }
}
Collection è una interfaccia e dichiara di lanciare quelle eccezioni in 
modo che leggendo il javadoc lo sviluppatore sappia che sono possibili 
ma, a livello di codice, potrebbe benissimo non farlo e le sue 
implementazioni potrebbero lanciarle ugualmente.
Spero di esserti stato di aiuto.
Ciao,
Tommaso

Per quanto riguarda ClassCastException, questa eccezione puo essere
lanciata dal metodo equals del membro della collezione, in quanto e'
questo il metodo che viene chiamato dalla collezione per verificare
che esista l'istanza in oggetto
Oliver

 una di queste eccezioni?
Per quanto riguarda NullPointerException() non è necessario di lanciarla 
esplicitamente per esempio, la seguente porzione di codice lancia una 
NullPointerException:
    Object pippo = null;
    pippo.toString();
Se dici che classi hai guardato magari posso dirti dove potrebbe venire 
lanciata una NullPointerException.
-- 
Andrea Francia
alias rm='trash' #use trash command instead of removing
rm -Rfv file     #put the file in the KDE trashcan
http://www.andreafrancia.it/trash

 > metodo contains() (
http://java.sun.com/javase/6/docs/api/java/util/Collection.html#conta..
.)

Si grazie sei stato molto chiaro.Ma mi sapresti scrivere un pezzettino
di codice che utilizzando una collection  fa si  contains() lanci un
eccezione di quelle specificate?

 > metodo contains() (
http://java.sun.com/javase/6/docs/api/java/util/Collection.html#conta..
.)

Ciao grazie sei stato davvero molto chiaro. Ma mi sapresti scrivere un
pezzettino di codice che fa si che add() lanci una delle sue possibile
eccezioni usando una collezione a piacere tuo. Sai non ho capito bene
quando avviene una ClassCastException, sulla documentazione dice:
if the class of the specified element prevents it from being added to
this collection, in pratica se ho tradotto bene dice :Quando la classe
dell'elemento specificato si assicura che non venga aggiunta a tale
collezione.

 rm -Rfv file     #put the file in the KDE trashcanhttp://
www.andreafrancia.it/trash
Ho guardato ArrayList

 una di queste eccezioni?
beh non capisco il senso di questa curiosità, se non appunto una 
curiosità fine a se stessa.
in ogni caso: questa logica rispetta le regole dell'ereditarietà (un 
metodo può dichiarare le stesse eccezioni del super, oppure meno o anche 
nessuna) e comunque si tratta di due eccezioni runtime che non è 
obbligatorio dichiarare.
-- 
 Fino all'anno scorso avevo un solo difetto. Ero presuntuoso.
http://softvalley.blogspot.com
http://www.flickr.com/photos/marko_po/

 Ho guardato ArrayList
ArrayList non ha senso che il metodo contains() scateni ne 
ClassCastException (può contenere elementi eterogenei) ne 
NullPointerException (ammette elementi null).


 
ariu...@tiscali.it
 ha scritto:

In realtà mi sono confuso, perchè ora ti spiego: leggendo la
documentazione, come detto all'inizio del post, ho visto che
l'intefaccia collection, ad esempio il metodo contains(), poteva
lanciare determinati tipi di eccezione, e pensavo che fosse
obbligatorio che ad esempio il metodo contains() di ArrayList
lanciasse tali eccezioni perchè cmq la specifica generale della classe
collection cosi diceva e ArrayListi in qualche modo ridefiniva tale
metodo di collection. Ma in realtà poi ho capito che alcuni metodi
contains() come ad esempio appunto quello di ArrayList non lanciano
nessuna eccezione, mentre ad esempio un altro metodo contains() quello
di TreeSet può lanciare effettivamente ClassCastException if the
specified object cannot be compared with the elements currently in the
set e NullPointerException if the specified element is null and this
set uses natural ordering, or its comparator does not permit null
elements.
Quindi detto questo io mi sforzavo di capire come contains() di
ArrayList postesse effettivamente lanciare tali eccezioni.

 metodo di collection. 
e questo non è vero.
le regole dell'ereditarietà parlano chiaro. un metodo può dichiarare al 
massimo le stesse eccezioni del super, ma può dichiararne meno, più 
specifiche e anche nessuna.
-- 
