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

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

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

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

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
632
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

1.5 скомпилированные классы имеют другой номер версии в классе. Класс не загружается в предыдущих версиях Java.

Ken Gentle 22.11.2008 23:26

Конечно, вам нужно скомпилировать -target / -source, чтобы встроить эту информацию.

flolo 22.11.2008 23:32

@flolo: если вы указываете источник 1.5, то источник 1.4 не разрешен. Вы действительно пробовали это?

Miserable Variable 23.11.2008 01:02

Hemal, вы имеете в виду -source 1.5 -target 1.4 запрещены.

Tom Hawtin - tackline 26.11.2008 16:16

В 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

Lena Schimmel 23.11.2008 20:34
Ответ принят как подходящий

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

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