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




Его байт-код совместим, он должен работать из коробки со старым интерпретатором.
Конечно, вам нужно скомпилировать -target / -source, чтобы встроить эту информацию.
@flolo: если вы указываете источник 1.5, то источник 1.4 не разрешен. Вы действительно пробовали это?
Hemal, вы имеете в виду -source 1.5 -target 1.4 запрещены.
В Netbeans (я не уверен, какую IDE вы используете) вы можете установить совместимость исходного кода с установленной версией java - просто установите ее на ту, которая поддерживает дженерики. Как уже было опубликовано, дженерики совместимы по байт-коду со старыми версиями JVM / JRE, поэтому мы надеемся, что они будут работать из коробки.
Насколько мне известно, Java 5 - это байт-код нет, совместимый с Java 1.4. То есть вы не можете использовать скомпилированные классы Java 5 с более ранней виртуальной машиной.
Можете проверить Retroweaver. Об этом много говорилось, когда были введены дженерики. Лично у меня нет опыта с этим.
Вы спрашивали у Google? Мой поиск показал http://www.publicobject.com/glazedlists/documentation/Generics_and_Java_1.4_with_one_codebase.pdf, что кажется очень интересным подходом.
Это именно то, что я искал, спасибо! Связанный вами PDF-файл просто описывает инструмент. Вы можете скачать его на sites.google.com/site/glazedlists/Home/declawer
Вам нужно использовать что-то вроде Retroweaver, чтобы добиться такого рода вещей. Другие ответы на этот вопрос немного вводят в заблуждение. Обобщения - это своего рода байт-код, совместимый с предыдущими версиями, но не полностью (см. java.lang.reflect.Type, если вы мне не верите). Кроме того, существует проблема атрибута версии байт-кода, которая не позволяет классу, скомпилированному для версии 1.5, работать в предыдущей версии. Retroweaver решает обе проблемы, а также включает другие функции Java 5, такие как аннотации и перечисления.
1.5 скомпилированные классы имеют другой номер версии в классе. Класс не загружается в предыдущих версиях Java.