Pergunta

Eu gosto muito de genéricos e os uso sempre que puder. De vez em quando eu preciso usar uma das minhas aulas em outro projeto que precisa ser executado em uma JVM antiga (antes de 5.0), precisa ser executado no Javame (onde não são permitidos genéricos) ou na Microsoft J# (que tem muito ruim Suporte para genéricos).

No momento, removo todos os genéricos manualmente, o que significa inserir muitos elencos também.

Como os genéricos são considerados apenas com tempo de compilação, e cada código genérico pode ser convertido em código não genérico automaticamente, eu me pergunto se existe alguma ferramenta que possa fazer isso por mim.

Se não existe essa ferramenta, de que outra forma eu poderia resolver o problema? Devo parar completamente de usar genéricos?

Já existem respostas relacionadas a Compabilidade de bytecode. E se eu precisar Compabilidade do código -fonte por algum motivo?

Foi útil?

Solução

Você precisa usar algo como Retroweaver Para alcançar esse tipo de coisa. As outras respostas sobre essa pergunta são um pouco enganosas. Os genéricos são uma espécie de bytecode compatível com versões anteriores, mas não totalmente (ver java.lang.reflect.Type Se você não acredita em mim). Além disso, há uma questão do atributo ByteCode Version, que impedirá que uma classe compilada contra 1.5 seja executada em uma versão anterior. A Retroweaver trabalha em torno dos dois problemas, ao mesmo tempo em que permite outros recursos do Java 5, como anotações e enumes.

Outras dicas

No NetBeans (não tenho certeza do que o IDE você está usando), você pode definir a compatibilidade do código de origem como uma versão Java Set - basta defini -lo como um que suporta genéricos. Como já publicado, os genéricos são compatíveis com bytecode com versões antigas JVM / JRE e, portanto, deve funcionar fora da caixa.

Até onde sei, o Java 5 é não Código de byte compatível com Java 1.4. Ou seja, você não pode usar as classes Java 5 com uma VM anterior.

Você pode verificar a Retroweaver. Isso foi mencionado muito quando os genéricos foram introduzidos. Pessoalmente, não tenho experiência com isso.

Você perguntou ao Google? Minha pesquisa apareceu http://www.publicobject.com/glazedlists/documentation/generics_and_java_1.4_with_one_codebase.pdf, o que parece uma abordagem muito interessante.

Seu bytecode compatível, ele deve funcionar fora da caixa com um intérprete antigo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top