Newsgroup: it.comp.java
Titolo: null e casting

ciao
sto cercando di venire a capo di un problema:
Ho qualcosa del tipo:
Hashtable ht = new Hashtable();
String value= (String)ht.get("key");
if ( value == null ) {
  // do something...
} 
Questo codice fino a questo momento (JDK 1.3 + Weblogic 5) era eseguito
in maniera che il blocco "do something..." venga eseguito!
Passando (con la stessa JDK) a Weblogic 7 il blocco non viene eseguito
perchè alla variabile value viene assegnato il valore "null".
Quest'ultimo comportamento mi sembra quello corretto, ma non riesco a
spiegarmi in alcun modo come funzionasse in precedenza!
Qualcuno può illuminarmi?
grazie
--
ShadowMan
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

> Qualcuno puň illuminarmi?
Probabilmente hanno cambiato il comportamente di String
per evitare di lanciare inutilmente (??) delle NullPointerException.
Prova cosě:
Hashtable ht = new Hashtable();
Object value= ht.get("key");
if ( value == null ) {
  // do something...
}
else
{
    String vlue = (String)value;
}
-- 
Luca Paganelli
ICQ# 52629494

 Qualcuno può illuminarmi?
Probabilmente l'errore (o il cambio di comportamento) non e' li', ma
prima - quando il valore corrispondente alla chiave viene inserito
nell'hashtable.
Prima, per qualche motivo, vi inserivi null. Adesso, vi inserisci (un
riferimento al) la stringa "null". La conversione dal primo alla
seconda viene fatta, con buone intenzioni, da parecchi metodi nella
libreria standard (ad esempio scrivendo su uno stream) quindi prova a
guardare se il codice che popola l'hashtable e' cambiato un po'.

 guardare se il codice che popola l'hashtable e' cambiato un po'.
Come ha detto Cristiano, il motivo e' a monte.. per qualche motivo
prima la Hashtable non conteneva la chiave cercata, mentre ora si..
oppure, come dici tu, prima 'key' era associata a un null pointer
mentre adesso e' associata a un oggetto valido.

 chiave cercata non viene trovata.
Eheh, si', credo di avercelo presente :-), ma intendevo proprio dire
che e' probabile che il processo precedente associasse esplicitamente
a "key" una variabile il cui valore era, per qualche motivo, null
(magari una String).
Ora, se per qualche motivo il codice fa un'operazione tipo
""+variabile, al posto del null originario si ritrovera' la stringa
"null" senza che il compilatore o il runtime dicano nulla.

 "null" senza che il compilatore o il runtime dicano nulla.
hehehe.. meraviglie di java :D
-- 
                Roberto Nunnari -software engineer-
                     mailto:
ro...@nunnisoft.ch
 
http://www.nunnisoft.ch
   Residenza Boschetto 12           tel/fax: 
+41-91-6046511
   6935 Bosco Luganese        """    mobile: 
+41-76-3208561
   Switzerland               (o o)
========================oOO==(_)==OOo========================

 ha scritto nel messaggio
news:cc08b3b2.0402...@posting.google.com

Purtroppo il codice è esattamente quello che ho indicato nel senso che
l'hashtable è vuota e non viene fatta alcuna operazione di concatenazione.
Tra l'altro ho letto sulle specifiche di Java che il comportamento corretto
è proprio quello: se si tratta di un oggetto, nella concatenazione di
stringhe viene chiamato il metodo toString() della classe alla quale
l'oggetto appartiene; se si tratta del 'puntatore' null viene restituita la
stringa "null".
-- 
ShadowMan