2008-11-22 2 views
4

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

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

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

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

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

ответ

5

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

-5

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

+0

1.5 скомпилированные классы имеют другой номер версии в классе. Класс не загружается в предыдущих версиях Java. – 2008-11-22 20:26:05

+0

Конечно, вы должны скомпилировать с -target/-source, чтобы вставлять эту информацию. – flolo 2008-11-22 20:32:35

2

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

2

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

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

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