Как использовать дженерики в мире смешанных версий Java? - PullRequest
4 голосов
/ 22 ноября 2008

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

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 22 ноября 2008

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

2 голосов
/ 22 ноября 2008

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

2 голосов
/ 22 ноября 2008

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

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

Вы спрашивали Google? Мой поиск показал http://www.publicobject.com/glazedlists/documentation/Generics_and_Java_1.4_with_one_codebase.pdf,, что кажется очень интересным подходом.

0 голосов
/ 22 ноября 2008

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

...