Domanda

Mi piacciono molto i generici e li uso dove posso. Ogni tanto ho bisogno di usare una delle mie classi in un altro progetto che deve essere eseguito su una vecchia JVM (prima della 5.0), deve essere eseguito su JavaME (dove non è consentito l'uso di generici) o in Microsoft J # (che ha MOLTO scarsa Supporto per generici).

Al momento, rimuovo manualmente tutti i generici, il che significa inserire anche molti cast.

Poiché si dice che i generici siano solo in fase di compilazione e ogni pezzo di codice generico potrebbe eventualmente essere convertito automaticamente in codice non generico, mi chiedo se ci sia uno strumento in grado di farlo per me.

Se non esiste tale strumento, in quale altro modo è possibile risolvere il problema? Dovrei smettere completamente di usare i generici?

Esistono già risposte relative alla compatibilità con bytecode . E se avessi bisogno di compatibilità del codice sorgente per qualche motivo?

È stato utile?

Soluzione

Devi usare qualcosa come Retroweaver per raggiungere questo tipo di cose. Le altre risposte a questa domanda sono leggermente fuorvianti. I generici sono in qualche modo compatibili con bytecode con le versioni precedenti, ma non del tutto (vedi java.lang.reflect.Type se non mi credi). Inoltre, esiste un problema dell'attributo versione bytecode, che impedisce l'esecuzione di una classe compilata su 1.5 su una versione precedente. Retroweaver risolve entrambi i problemi abilitando anche altre funzionalità di Java 5 come annotazioni ed enumerazioni.

Altri suggerimenti

In Netbeans (non sono sicuro di quale IDE stai usando) puoi impostare la compatibilità del codice sorgente su una versione java impostata - basta impostarla su una che supporti i generici. Come già pubblicato, i generici sono compatibili con bytecode con le vecchie versioni JVM / JRE e quindi si spera che funzioni immediatamente.

Per quanto ne so Java 5 è non byte-code compatibile con Java 1.4. In altre parole, non è possibile utilizzare le classi compilate Java 5 con una VM precedente.

È possibile controllare retroweaver. Questo è stato menzionato molto quando sono stati introdotti i generici. Personalmente non ho esperienza con esso.

Hai chiesto a Google? La mia ricerca è risultata http://www.publicobject.com/glazedlists/documentation/ Generics_and_Java_1.4_with_one_codebase.pdf , che sembra un approccio molto interessante.

È compatibile con bytecode, dovrebbe funzionare immediatamente con un vecchio interprete.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top