Рассмотрим следующий сценарий:
public void someMethod () {}
Я хочу аннотировать someMethod () пользовательской аннотацией, скажем @CustomAnnotation
.Я хочу взять динамический параметр в CustomAnnotation из параметра метода и вызвать ошибку времени компиляции, если этот параметр не объявлен в сигнатуре метода.
Например:
@CustomAnnotation(mandatorySample = "customId")
public void someMethod(String customId) {
}
Для приведенного выше фрагмента я хочу выдать ошибку времени компиляции, если someMethod не передает параметр «customId».Основная цель - взять параметр динамического идентификатора из аргументов метода или использовать один параметр для метода и аннотации.
Мое исследование: Я исследовал одно решение - использовать инъекцию через позицию Аргумента и получать значение от отражений.Но все же я не могу вызвать ошибку времени компиляции в этом.
Я открыт для решения на основе #Java или #Spring.
* Больше объяснений:
Допустим, моя аннотация
Public @interface Logger {
String mandatoryLogParam();
}
Пусть метод someLogMethod(...)
использует мою аннотацию.Рассмотрим следующие случаи.
** Invalid Usage **
@Logger(mandatoryLogParam = ‘myMandatoryGeneratedId’)
public void someLogMethod(String logMessage) {
}
MyExpectation: To throw compile error as
-> Method signature should includeparameter named “myMandatoryGeneratedId”
** Valid Usage: **
@Logger(mandatoryLogParam = ‘myMandatoryGeneratedId’)
public void someLogMethod(String logMessage, String myMandatoryGeneratedId) {
}
MyExpectation: No compile error is thrown.
Моя цель здесь - использовать параметр, который метод определяет, чтобы использовать его в качестве внутренней логики аннотации.В то же время вызывая проверку времени компиляции для разработчика, используя аннотацию.
Обратите внимание на использование * 'myMandatoryGeneratedId' * в приведенном выше коде.
Возможно ли это?Остальные обходные пути?