簡體   English   中英

注釋處理器,獲取方法參數的修飾符

[英]Annotation Processor, Getting Modifiers of Method Parameters

我目前正在一個項目中使用 Java 的自定義注釋。 我想強制我的注釋的用戶,如果他用@Foo 注釋了方法,他必須在方法參數列表中至少聲明一個final boolean b 所以它應該看起來像這樣:

@Foo
public void foo(final boolean b) { }

@Foo
public void bar() { } // This should result in an error

使用我的注釋處理器,我可以檢索變量的類型,但不能檢索最終修飾符 如果我想檢索如下代碼所示的修飾符集,盡管最終修飾符存在於參數中,但該集將始終為空。

for (VariableElement parameter : method.getParameters()) {
    Set<Modifier> modifiers = parameter.getModifiers(); // This set is always empty
}

任何想法,為什么會這樣?

不幸的是, javax.lang.model類似乎沒有忠實地表示參數的final修飾符(即,根據源文件)。 javax.lang.model.element文檔說(我的粗體):

在注釋處理的上下文中使用時,必須返回所表示元素的准確模型。 由於這是一個語言模型,源代碼提供了所討論的構造的基准(參考)表示,而不是像類文件這樣的可執行輸出中的表示。 可執行輸出可以作為創建建模元素的基礎。 但是,將源代碼轉換為可執行輸出的過程可能不允許恢復源代碼表示的某些方面。 例如,無法從類文件中恢復具有源保留的注釋,並且類文件可能無法提供源位置信息。 參數名稱可能無法從類文件中恢復。 在某些情況下,元素上的修飾符可能會有所不同,包括:

  • 類或接口上的strictfp
  • final一個參數
  • 類和接口上的protectedprivatestatic

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM