在 Java 中,註釋對於向編譯器或運行時系統提供元資料非常有用。然而,一個持續存在的問題是註釋是否可以接受在運行時動態產生的值。
下面的嘗試嘗試為@MyInterface 的aString 屬性產生字串值:
<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>
但是,編譯器將拒絕此操作並顯示錯誤訊息:
The value for annotation attribute MyInterface.aString must be a constant expression
這是因為註解是在編譯時評估的,但直到執行時才知道GENERIC_GENERATED_NAME。
為了達到預期的效果,它有必要建立一個可以在編譯時評估generateName方法的註解處理器。然而,這個解決方案有局限性,因為 Java 不支援在運行時動態評估程式碼。
以上是Java 註解可以在執行時期接受動態產生的值嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!