Rumah  >  Artikel  >  Java  >  Bolehkah Anotasi Java Menerima Nilai Dijana Secara Dinamik pada Runtime?

Bolehkah Anotasi Java Menerima Nilai Dijana Secara Dinamik pada Runtime?

DDD
DDDasal
2024-10-28 14:42:30406semak imbas

 Can Java Annotations Accept Dynamically Generated Values at Runtime?

Menilai Anotasi pada Runtime

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn