Newsgroup: it.comp.java
Titolo: versioning java

Salve,
il mio problema è questo: Ho scritto delle librerie con la versione 1.4.2_05
adesso che è uscita la versione 5, vorrei utilizzare i generics, andando a
modificare le liste. Quindi, laddove ho scritto List miaLista = new
ArrayList() adesso vorrei scrivere List<mioOggetto> = new
ArrayList<mioOggetto>(). Vorrei però, mantenere la compatibilità, con il
passato.
In che modo, posso dire al compilatore che se trova la jdk 1.4.2_05 deve
usare la vecchia forma, mentre se trova la jdk1.5.0 deve usare quella nuova
?
Grazie,
Maurizio.

Maurizio Penna ha scritto:

In nessun modo. Se vuoi avere due release devi gestire due release.
Java non ha un preprocessore con la compilazione condizionale.

Subversion o ant ti aiutano molto per queste cose
-- 
----------------------------------------------------------
......vieni a trovarmi 
http://www.glz.it
......dai voce al tuo sito 
http://www.talkwithus.it
----------------------------------------------------------

 Java non ha un preprocessore con la compilazione condizionale.
Ho fatto questa richiesta, perché, un po' di tempo fa, avevo letto un
articolo sulla programmazione in C++, che era possibile fare una qualcosa di
quel genere senza usare le direttive di precompilazione. Bastava usare in
modo appropriato i namespace, in modo che venisse istanziata la classe
corretta a runtime (purtroppo non trovo piů il riferimento al link), e
speravo che in java si potesse utilizzare la stessa metodologia.
Grazie,
Maurizio.

 speravo che in java si potesse utilizzare la stessa metodologia.
Beh, probabilmente è possibile istanziare a runtime il tipo che supporta 
i generics, ma a che ti serve? Non potresti assegnarlo ad una variabile 
reference di quel tipo perchè le versioni precedenti non le supportano 
(e non potresti compilare il sorgente), quindi non vedo poi come 
potresti usarli.
Beh, potresti gestirli come Object e chiamare anche i metodi 
dinamicamente con la reflection, ma direi che si perde un tantino di 
vantaggi nell'usare i generics... :)

 Maurizio Penna ha scritto:
[...]
Mi sa che mi sto fascendo la testa per niente...
Ma ho sempre questa fissa che tutto ciò che è un evoluzione delle cose che
ho già scritto deve essere compatibile con le versioni precedenti,
soprattutto se faccio il refactoring delle vecchie classi.
In C++, lo trovo demplice, un po' noiso ma semplice, forse anche perché la
STL non subisce variazioni da parecchio. In Java, forse perché mi ci sono
avvicinato da poco, alle volte mi accorgo che mi faccio delle s....e mentali
per cose che non hanno senso... ed ho la sensazione che questa è una di
quelle! nel senso che ho fatto sta cosa ed adesso volevo aggiornarla alla 5,
ma mi sta venendo in mente che, comunque, l'utente deve avere la jre 5
installata, quindi non risolvo il mio problema, in quanto non volevo che
installasse, se non lo voleva, la nuova versione.
Grazie, comunque per la risposta.
ciao,
Maurizio.

 installasse, se non lo voleva, la nuova versione.
In C/C++ hai sempre il preprocessore con cui puoi dare direttive 
condizionali al compilatore. In questo modo puoi effettivamente scrivere 
sorgenti che sono compatibili in tutte le condizioni di compilazione, 
magari diventa complicato ma lo puoi fare.
In java ciò è impossibile. Quando cambia un elemento del linguaggio fra 
una versione e l'altra, è impossibile scrivere un sorgente che usi una 
nuova caratteristica e contemporaneamente sia compilabile con la 
versione precedente del compilatore.
Se usi un sistema di versioning la soluzione è gestire due rami dei 
sorgenti.



Non è una cosa che teoricamente si può fare con le annotation ?
Se ho detto una cazzata scusatemi, ma non ho ancora capito bene a cosa  
servano
-- 
Manny Calavera
AntiSpam: CAVA²

 
visto che le versioni precedenti non supportano le annotazioni direi di 
no, e poi mancherebbe comunque l'infrastruttura necessaria, intendendo 
le varie cose da usare come valori condizionali.
Almeno credo :)