Ответ 1
К сожалению, Java не всегда поддерживает создание классов во время выполнения, что вам нужно: SingleList
необходимо автоматически обновить с помощью необходимых методов заглушки, чтобы соответствовать классу Single
.
Я могу придумать следующие подходы к этой проблеме:
-
Используйте Отражение Java:
- Плюсы:
- Он легко доступен на языке Java, и вы можете легко найти документацию и примеры.
- Минусы:
- Класс
SingleList
больше не будет совместим с интерфейсом классаSingle
. - Компилятор Java и любые IDE, как правило, не могут помочь с методами, вызванными отражением. Ошибки, которые были бы уловлены компилятором, обычно преобразуются в исключения времени выполнения.
- В зависимости от вашего варианта использования вы также можете заметить заметное ухудшение производительности.
- Класс
- Плюсы:
-
Используйте систему сборки вместе с каким-то генератором исходного кода для автоматического создания файла
SingleList.java
.- Плюсы:
- Как только вы его настроите, вам больше не придется иметь дело с этим.
- Минусы:
- Настройка этого уровня имеет определенную степень сложности.
- Вам придется отдельно убедиться, что класс
SingleList
, загруженный в любой JVM - или ваш IDE, если на то пошло - фактически соответствует загруженному классуSingle
.
- Плюсы:
-
Решить эту проблему вручную - создание интерфейса (например,
SingleInterface
) или базовый абстрактный класс для использования обеими классами должны помочь, поскольку любая достойная среда IDE укажет на нереализованные методы. Надлежащая архитектура классов сводит к минимуму дублированный код, и ваша среда IDE может помочь в создании частей шаблона.- Плюсы:
- Кривая настройки не будет достигнута.
- В вашей среде IDE всегда будет отображаться правильный набор классов.
- Архитектура класса обычно улучшается после.
- Минусы:
- Все в порядке.
- Плюсы:
-
Используйте библиотеку генерации байт-кода, например Javassist или BCEL для динамического создания/изменения класса
SingleList
на лету.- Плюсы:
- Этот метод чрезвычайно эффективен и может сэкономить много времени в долгосрочной перспективе.
- Минусы:
- Использование библиотек генерации байт-кода обычно не тривиально, а не для слабонервных.
- В зависимости от того, как вы пишете свой код, вы также можете иметь проблемы с вашей IDE и обработкой динамических классов.
- Плюсы: