![](/img/trans.png)
[英]Recursively modify all fields in an object annotated with a given annotation
[英]Require all fields of a given type to be annotated by a certain field annotation
我有一個很好的字段注釋
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Foo {
// lots of useful, mandatory values here
}
我想創建一個類型注釋
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface Bar {
...
}
這樣任何帶注釋的@Bar
類型都會拋出編譯器警告,如果它們包含沒有用@Foo.
注釋的@Foo.
換句話說,我希望Bar
強制執行一個契約,其中所有@Bar
-annotated類'字段都必須有@Foo
注釋,否則我會從編譯器得到一個很好的警告。
這可能嗎?
謝謝!
沒有注釋使javac直接這樣做。
但是,有些東西叫做“注釋處理器”。 它們作為編譯運行的一部分運行,它們可以生成錯誤和警告。 您可以編寫一個,在任何包含使用@Bar
注釋的類型的源文件上觸發,檢查內部的每個字段,如果找不到@Foo
注釋,則發出錯誤。
注釋處理器可以處理具有任何保留級別的注釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.