Heim  >  Artikel  >  Java  >  Können Java-Annotationen zur Laufzeit dynamisch generierte Werte akzeptieren?

Können Java-Annotationen zur Laufzeit dynamisch generierte Werte akzeptieren?

DDD
DDDOriginal
2024-10-28 14:42:30406Durchsuche

 Can Java Annotations Accept Dynamically Generated Values at Runtime?

Annotationen zur Laufzeit auswerten

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn