Чтобы получить конкретную причину, вам нужно поговорить с людьми, которые разработали эту функцию.
Однако, как общий фон, следует понимать, что на самом деле есть три различных способа обработки аннотаций в соответствии с метааннотацией RetentionPolicy (и да, я специально выбрал JavaDoc 1.5):
SOURCE
означает, что аннотация существует только в исходном коде и вообще не записывается в файл класса. Он предназначен для аннотаций, которые изменяют поведение компилятора, но не должны иметь никакого значения для работающей программы.
RUNTIME
означает, что аннотация записывается в файл класса таким образом, чтобы она была видна программе через отражение. Как отмечено в комментариях, вы не можете отражать локальную переменную.
CLASS
означает, что аннотация записывается в файл класса таким образом, что невидим для программы . Однако они могут быть прочитаны анализаторами байт-кода или загрузчиками классов.
Аннотации появляются в файле класса как атрибут класса, метода или поля. Идея таблицы атрибутов, прикрепленных к этим объектам, была известна с тех пор, как был определен формат файла класса, поэтому добавить к ним аннотации было легко. Однако LocalVariableType не имеет атрибутов для каждой переменной.
Итак, я предполагаю , что архитекторы JVM решили, что преимущество аннотаций локальных переменных, зависящих только от времени загрузки, не стоит изменений в структурах данных, используемых для управления таблицей локальных переменных.