假設一個類定義了一個恆定域:訪問恆定場
public class Foo {
public static final int CONSTANT_FIELD = 3;
}
並假設的註釋界面被聲明如下所示:
public @interface Something {
int value();
}
最後,假設註釋被用作如下:
@Something(Foo.CONSTANT_FIELD)
問題:在批註處理器中,如何從設置@Something
的值中獲取CONSTANT_FIELD
的元素?
編輯:在問題本身包含一個具體的例子。
我有被使用這樣的註釋:
@RuleDependency(recognizer = BQLParser.class,
rule = BQLParser.RULE_statement,
version = 0)
註釋處理器需要知道RULE_statement
處於BQLParser
類中定義的常數。如果我可以直接通過設置註釋的rule
屬性訪問Element
的BQLParser.RULE_statement
,那麼它將消除對recognizer
屬性的需要。此註釋在實際應用中使用數千次,並且recognizer
爲總是只是rule
常數的聲明類型。解決這個問題,將簡化註解的使用,只是這樣的:
@RuleDependency(rule = BQLParser.RULE_statement, version = 0)
不錯!還要注意的是,當擴展AbstractProcessor時,您總是可以通過受保護的字段「processingEnv」訪問ProcessingEnvironment - 無需重寫'Processor.init'。 – Balder
爲什麼你想要做這一切?當然'enum'是一個更好的解決方案。 –
@LanceJava我無法控制代碼生成的其他部分(例如有關常量的聲明)。所以要回答你的問題,「因爲我想讓它工作,而不是不工作。」 :) –