我經常發現自己試圖弄清楚一個特定的注釋是如何在幕后作業的。在 IDE(如 IntelliJ)中對注釋執行“查找用法”通常只會將您帶到實際使用注釋的位置。但是,我看不到一種簡單的方法來找到處理注釋的邏輯。
我明白這是因為注釋的性質,很難看到它們在哪里被處理,但同時,當它們被消耗時,必須匯入特定的注釋,以便建立一個鏈接。
舉個例子
SomeAnnotation.java
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface SomeAnnotation {
}
它正在 AnnotationConsumer.java 中使用
import com.annotations.SomeAnnotation
public class AnnotationProcessor {
public AnnotationProcessor() {
if (currentClass.isAnnotationPresent(SomeAnnotation.class)) {
// do some logic
}
}
}
通常,某些代碼將使用@SomeAnnotation 進行標記。
我想做的是找到正在處理 SomeAnnotation 的 AnnotationProcessor 類。
到目前為止,我搜索的任何內容都只會引導我走上如何處理注釋的路徑,而不是處理注釋的位置。
uj5u.com熱心網友回復:
如果是關于運行時注解處理器,那么在IDEA中除錯應用程式,在方法上放置一個條件斷點Class.isAnnotationPresent(Class<? extends Annotation> a)。
條件是a.equals(SomeAnnotation.class)。
由于條件斷點,除錯會很慢,但是當斷點命中時您可能會發現呼叫堆疊。
uj5u.com熱心網友回復:
您沒有指定您是在考慮編譯時注釋處理還是運行時注釋處理。
對于編譯時注解處理,注解處理器要么列在命令列上的一個-processor標志之后,要么(對于自動發現)它列在META-INF/services/javax.annotation.processing.Processor搜索路徑上名為的檔案中。請參閱https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529744.html
標籤:爪哇智能理念注释
上一篇:為什么kotlin/nativehelloworld在AppleM1上的IntelliJIDEA內不輸出任何內容?
