Newsgroup: it.comp.java
Titolo: Switch - case: chi ha ragione?

Ciao!
Qualcuno mi aiuta a capire perché due compilatori si comportano in modo
diverso con gli switch?
Ho fatto uno switch con i case che hanno come valore, invece che un intero
scritto esplicitamente, una costante (final int) definita in un'altra
classe.
JBuilder 4 su NT (java 1.3.0-C) si lamenta dicendo che quella costante...
non è una costante; se sposto il sorgente su Solaris e lo compilo con JDK
1.2.2 non ottengo alcun errore...
Direi che il comportamento corretto è il secondo, ma non ho capito se è
JBuilder un po' scemo o è cambiato qulacosa con la 1.3....
Grazie a tutti!
Dario



dichiara le costanti come static final 
questa risposta non chiarisce il tuo dubbio
ma al momento non posso fare prove 
ciao_O
_______________________________________
http://jame.sourceforge.net
 
[ last release jame4.2b ]
_______________________________________
http://digilander.iol.it/schiele

 >JBuilder un po' scemo o č cambiato qulacosa con la 1.3....


 wrote in message
news:3b84e97...@news.tiscalinet.it...


Adesso provo, ma.... La butti lě o sai che deve essere cosě?
:)
dunque...
ecco...
come dire...
hai una domanda di riserva?
seriamente
posso vedere come hai scritto lo switch
ciao_O
_______________________________________
http://jame.sourceforge.net
 
[ last release jame4.2c ]
_______________________________________
http://digilander.iol.it/schiele

 wrote in message
news:3b856b75...@news.tiscalinet.it...


Ho provato con static, ma non cambia...
dunque...
una variabile final e' costante ma non esiste a rigore prima di aver istanziato la classe
quindi puo' darsi che un compilatore severo non lo digerisca 
prova cosi'
switch (qe.propertyName)
{
    case NomeClasse.ANN_surface_min:
        // roba varia
    break;
}
public static final int ANN_surface_min=1;



E se fosse.....
se fosse che stai usando la costante di un'altra classe ma che non e'
vista dalla classe nella quale e' contenuta lo switch? Potrebbe essere
una idea stupida ma prova a dichiarare la classe della costante come
public perche' mi sa che se non stanno nello stesso package.. hum.. 
Bhe potrebbe essere una idea anche se idiota. E potrebbe essere per
questo motivo che non funziona su uno ma sotto l'altro si (CLASSPATH
diversi?)
Inoltre prova con lo switch/case con una costante all'interno della
stessa classe. Cioe' con la costante definita nella classe dove sta lo
switch
in boca al lupo!

 
Scusa, ma sei sicuro che il tipo di "propertyName" sia compatibile? Ad
esempio puo` essere int ma non String (per dirne una, insomma: deve
essere un enumerativo). O ancora se "propertyName" e` int anche tutte le
espressioni dei vari case si devono risovere in valori int. ecc.
un errore del genere mi sembra strano... posta esattamente quello che ti
riporta il compilatore, cosi` come la dichiarazione di
"qe.propertyName".
-- 
Ciao,  |     Gott weiss ich will kein Engel sein
Matteo |                     -- Rammstein, Engel

 wrote in message
news:3b8900ca...@news.tin.it...


 wrote in message
news:3B895585...@libero.DALLO-SPAM.it...


un'altra classe.
Una cosa che l'esperienza insegna con i membri final e' di *ricompilare* 
tutte le classi che ne fanno uso se ne cambi il valore (o se togli il
"final"). 
Molti compilatori java *copiano* i valori dei membri final di tipo
primitivo nelle classi che ne fanno uso e questo puo' generare notevoli
mal di capo.. :-) 
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 wrote in message
news:3b868bcb...@news.tiscalinet.it...



Uhmmm, io non ho molta esperienza con JAVA ma se ho capito bene:
1) "public final int" formalmente non e' una costante (e magari questo puo'
sviare qualche compilatore), ma una variabile che una volta assunto un
valore, non lo puo' piu' cambiare;
2) la dichiarazione corretta credo dovrebbe essere
    public static final int ANN_surface_min = 1;
e il riferimento ad essa _non_dovrebbe avvenire usando il formato
    istanza_della_classe.costante
ma
    nome_della_classe.costante,
quindi se "qe" e' un'istanza di "ClasseQE" dovresti scrivere lo switch come
switch (qe.propertyName)
{
    case ClasseQE.ANN_surface_min:
        // roba varia
    break;
}
questo perche' se la costante e' static final, assume lo stesso valore
indipendentemente dall'istanza della classe.
Ricorda pero' che sono un novellino e che avrei potuto scrivere un sacco di
scemenze...
Ciao,
        Marco.