JSR 308 предлагает добавлять аннотации типов в Java. После его ратификации программисты смогут добавлять аннотации везде, где в настоящее время разрешен тип Java. Это включает в себя не только декорации методов / полей / локальных / параметров, но также вызовы конструкторов, приведение типов и, что самое любопытное, проверки instanceof. Checker Framework использует JSR 308 для реализации квалификаторов типов, таких как @NonNull
для типов объектов или @Regex
для строк.
Теперь все, что делает Checkers, - это статический анализ вашего кода. Это все проверки во время компиляции. Хорошо. Но я хочу иметь механизм, который может выполнять проверки во время выполнения. Вы можете заявить:
@Regex String p1 = "[a-z]+";
@Regex String p1 = "[a-z)+"; // compile time error from annotation processor
Еще я могу написать:
if (x instanceof @Regex String) ...
но это ничем не отличается от x instanceof String
, проверка во время выполнения не выполняется. Мне нужен процессор аннотаций времени компиляции или манипулятор байт-кода времени выполнения, который позволяет мне запускать произвольный код при проверках instanceof
и возвращать логическое значение. Возможно ли это с Java?