Как легко переключать источники импорта в java?

NB: Пожалуйста, предложите лучшее название для этого вопроса.

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

Зачем мне это нужно?, спросите вы.

Мне нужно использовать важную библиотеку Java, которая использует java.time, но мне также нужно поддерживать min sdk 23 (Android 6.0). Я мог бы использовать триЗатемABP в своем приложении для Android, чтобы использовать все API java.time, но мне нужно импортировать их из org.threeten.bp.

Эта важная библиотека на самом деле является частной. Итак, идея состоит в том, чтобы заставить его использовать либо импорт java.time, либо импорт org.threeten.bp, чтобы скомпилировать 2 версии, которые были бы совместимы как с Android-приложениями, так и с настольными Java-приложениями.

Надеюсь, мои объяснения достаточно ясны. Спасибо за помощь.

Библиотека, использующая java.time, недоступна в Android ниже 26 уровня. Поэтому нет возможности использовать эту библиотеку в более старых версиях Android. Единственным способом была бы возможность (если у вас есть) хранить две разные версии этой библиотеки — одна из них использует вместо этого threetenbp. Я не знаю, можете ли вы создать его самостоятельно или собрать из доступных источников, которые вы могли бы редактировать (на основе форка?).

Meno Hochschild 15.05.2019 20:04

@MenoHochschild да, это именно то, что я пытаюсь объяснить выше («... идея состоит в том, чтобы использовать либо java.time импорт, либо org.threeten.bp импорт для компиляции 2 версий»). Теперь вопрос в том, как я могу сделать это чистым способом?

Ariles 16.05.2019 10:57

Я предлагаю вам просто всегда использовать бэкпорт (пока однажды вы не сможете переключиться на использование встроенного java.time всегда). Хотя бэкпорт был разработан для Java 6 и 7, он работает и с более поздними версиями Java.

Ole V.V. 17.05.2019 13:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В итоге я использовал threetenbp в проекте библиотеки, как предложил @Ole V.V.
Затем в моем проекте для Android я использовал threetenAbp (версия для Android) и импортировал ее в библиотеку с помощью gradle. Наконец, исключение пакетов, используемых в библиотеке, означает, что вместо них используется threetenAbp.

implementation ('my-library') {
    exclude group: 'org.threeten'
}

NB: обратите внимание на разницу (A) в threetenbp и threetenAbp.

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