Dalam Java, anotasi berguna untuk menyediakan metadata kepada pengkompil atau sistem masa jalan. Walau bagaimanapun, soalan berterusan ialah jika anotasi boleh menerima nilai yang dijana secara dinamik pada masa jalan.
Percubaan di bawah cuba menjana nilai rentetan untuk atribut aString @MyInterface:
<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>
Walau bagaimanapun, pengkompil akan menolak ini dengan mesej ralat:
The value for annotation attribute MyInterface.aString must be a constant expression
Ini kerana anotasi dinilai pada masa penyusunan, tetapi GENERIC_GENERATED_NAME tidak diketahui sehingga masa jalan.
Untuk mencapai kesan yang diingini, ia adalah perlu untuk mencipta pemproses anotasi yang boleh menilai kaedah generateName pada masa penyusunan. Walau bagaimanapun, penyelesaian ini mempunyai had, kerana tiada sokongan dalam Java untuk menilai kod secara dinamik semasa masa jalan.
Atas ialah kandungan terperinci Bolehkah Anotasi Java Menerima Nilai Dijana Secara Dinamik pada Runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!