Как использовать дженерики в мире смешанных версий Java?

StackOverflow https://stackoverflow.com/questions/311599

Вопрос

Я очень люблю дженерики и использую их везде, где могу. Время от времени мне нужно использовать один из моих классов в другом проекте, который должен работать на старой JVM (до 5.0), должен работать на JavaME (где не разрешены ни универсальные шаблоны), ни в Microsoft J # (где ОЧЕНЬ плохо Поддержка дженериков).

В настоящий момент я удаляю все дженерики вручную, что также означает вставку множества приведений.

Поскольку говорят, что обобщенные элементы предназначены только для времени компиляции, и каждый фрагмент обобщенного кода может автоматически преобразовываться в неуниверсальный код, мне интересно, существует ли какой-либо инструмент, который может сделать это для меня.

Если такого инструмента нет, как еще можно решить проблему? Должен ли я полностью прекратить использование дженериков?

Уже есть ответы, связанные с совместимостью байт-кода . Что если мне по какой-то причине понадобится совместимость исходного кода ?

Это было полезно?

Решение

Вам нужно использовать что-то вроде Retroweaver , чтобы добиться такого рода вещей. Другие ответы на этот вопрос немного вводят в заблуждение. Обобщения являются своего рода байт-кодом, совместимым с предыдущими версиями, но не полностью (см. java.lang.reflect.Type , если вы мне не верите). Кроме того, существует проблема с атрибутом версии байт-кода, который препятствует запуску класса, скомпилированного для версии 1.5, в предыдущей версии. Retroweaver решает обе проблемы, а также включает другие функции Java 5, такие как аннотации и перечисления.

Другие советы

В Netbeans (я не уверен в том, какую IDE вы используете) вы можете установить совместимость исходного кода с установленной версией Java - просто установите ту, которая поддерживает дженерики. Как уже сообщалось, дженерики совместимы со старыми версиями JVM / JRE, поэтому мы надеемся, что они будут работать «из коробки».

Насколько мне известно, Java 5 не байт-код совместим с Java 1.4. То есть вы не можете использовать скомпилированные классы Java 5 с более ранней виртуальной машиной.

Вы можете проверить ретро-ткач. Об этом много говорилось, когда были представлены дженерики. У меня лично нет никакого опыта с этим.

Вы спрашивали Google? Мой поиск обнаружил Generics_and_Java_1.4_with_one_codebase.pdf , что кажется очень интересным подходом.

Его байт-код совместим, он должен работать из коробки со старым интерпретатором.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top