Можно ли использовать аннотации для создания нескольких версий 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)?
Обратите внимание, что мне нужна поддержка интерфейсов и классов, включая абстрактные и внутренние классы. Методы и константы также должны быть версиями.
Хорошо, я думаю, что вы действительно можете использовать аннотации для обозначения диапазонов версий, которые должны выставлять API. Например, если метод foo()
был введен в версии 1.1. и устарел в версии 1.5, вы можете отметить его следующим образом:
класс MyApiImpl {@Since ("1.2") @DeprecateAt ("1.4") @Until ("1.5") foo(); }
Затем вы можете автоматически генерировать интерфейс интерфейса MyApi
соответствии с клиентской версией:
@Deprecated