Использование аннотаций для создания нескольких версий API

1

Можно ли использовать аннотации для создания нескольких версий API?

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

Таким образом, вы создадите код, например:

@Since("1.2") <- only created when 1.2 or higher
public interface InNewerAPI {

    @Since("1.3") <- only compiled when 1.3 or higher
    public void methodInEvenNewerAPI();

}

Конечно, я мог бы использовать препроцессор для этого, но я бы хотел избежать предварительных процессоров для Java-кода.

Существуют ли какие-либо недостатки такого подхода (например, потеря имен аргументов до 1.8)?

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

  • 0
    я думаю это элегантно
  • 0
    Вы говорите о поддержке нескольких версий Java, а не разных версий вашего API, верно?
Показать ещё 3 комментария
Теги:
annotations
compiler-construction
preprocessor

1 ответ

0
Лучший ответ

Хорошо, я думаю, что вы действительно можете использовать аннотации для обозначения диапазонов версий, которые должны выставлять API. Например, если метод foo() был введен в версии 1.1. и устарел в версии 1.5, вы можете отметить его следующим образом:

класс MyApiImpl {@Since ("1.2") @DeprecateAt ("1.4") @Until ("1.5") foo(); }

Затем вы можете автоматически генерировать интерфейс интерфейса MyApi соответствии с клиентской версией:

  1. для клиентской версии версии 1.2 этот метод не будет включен в интерфейс.
  2. для клиента между версиями 1.2 и 1.4 он будет включен
  3. для версии 1.4 клиента он будет включен, но отмечен как @Deprecated
  4. он не будет включен для клиентов после 1,5

Ещё вопросы

Сообщество Overcoder
Наверх
Меню