Heim >Java >javaLernprogramm >Können Java-Annotationen zur Laufzeit dynamisch generierte Werte akzeptieren?
In Java sind Annotationen nützlich, um Metadaten für einen Compiler oder ein Laufzeitsystem bereitzustellen. Eine ständige Frage ist jedoch, ob Annotationen zur Laufzeit dynamisch generierte Werte akzeptieren können.
Der folgende Versuch versucht, einen String-Wert für das aString-Attribut von @MyInterface zu generieren:
<code class="java">@MyInterface(aString = MyClass.GENERIC_GENERATED_NAME) public class MyClass { static final String GENERIC_GENERATED_NAME = MyClass.generateName(MyClass.class); public static final String generateName(final Class<?> c) { return c.getClass().getName(); } }</code>
Allerdings Der Compiler lehnt dies mit der Fehlermeldung ab:
The value for annotation attribute MyInterface.aString must be a constant expression
Dies liegt daran, dass Annotationen zur Kompilierungszeit ausgewertet werden, GENERIC_GENERATED_NAME jedoch erst zur Laufzeit bekannt ist.
Um den gewünschten Effekt zu erzielen, ist es Es wäre notwendig, einen Annotationsprozessor zu erstellen, der die Methode „generateName“ zur Kompilierungszeit auswerten könnte. Allerdings weist diese Lösung Einschränkungen auf, da es in Java keine Unterstützung für die dynamische Auswertung von Code zur Laufzeit gibt.
Das obige ist der detaillierte Inhalt vonKönnen Java-Annotationen zur Laufzeit dynamisch generierte Werte akzeptieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!