Warum sollte der Wert für ein Anmerkungsattribut ein konstanter Ausdruck sein?

Ich habe den folgenden Code

 @UIUnitTimeout(8*60*1000) // works
 @UIUnitTimeout(TimeUnit.MINUTES.toMillis(8)) // does not work

Ich weiß, dass gemäß JLS nur konstante Ausdrücke als Werte für Annotationsattribute zulässig sind. Aber warum? Warum ist es nicht ausreichend, wenn die Datentypen übereinstimmen? Gibt es etwas, was möglicherweise schief gehen könnte, wenn die Ausdrücke zur Laufzeit ausgewertet würden? Hat jede Spezifikation eine logische Begründung?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage