![](/img/trans.png)
[英]Java runtime retention annotations - annotation class required at compile time but not at runtime?
[英]Annotation Bind Time (When are annotations bound in Java)
我正在編寫代碼,其中數據庫的表名必須根據我是在開發環境還是prod環境中而改變。 由於我使用的是Dynomo DB的高級API,因此表名被定義為注釋。 例如,以下代碼是可能的,以及管理其行為的規則是什么:
static String postfix = "_test"; // (could be set to say _prod, _dev, etc.)
@DynamoDBTable(tableName="sometable" + postfix)
class MyTable {
...
...
這導致的一系列問題是:
謝謝。
這取決於如何定義注釋。 “保留”定義它是編譯時還是運行時。
使用java反射你可能會這樣一個setAccessible(true); 並在運行時設置Annotation
java中的注釋必須具有在編譯時可解析的值。 注釋中不能有任何運行時信息,因為它是類定義本身的一部分。 如果需要運行時信息,則必須由在運行時查找注釋的任何人解決。
至於保留,有3種保留形式:
源 - 編譯器使用注釋(通常用於提示和/或源生成)。 例子包括@Override和@SuppressWarnings,並且在所有注釋處理器都有機會看到它們之后被丟棄。 在.class文件中沒有記錄任何內容。
類 - 注釋保存為.class文件本身的一部分,並且可用於解析類byte []數據(javassist等)的工具,但不是實際加載的java類對象的一部分。
運行時 - 作為java Class對象的一部分,注釋可從編譯時一直到運行時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.