[英]java cyclic annotations
我想用注釋創建樹結構
@Retention(RetentionPolicy.RUNTIME)
public @interface MyNode {
String name();
MyNode next() default null;
}
但編譯器告訴它是循環的,因此是不允許的。
我想知道為什么不允許這樣做,我怎樣才能做出類似的東西?
它不是樹形結構,只是線性列表。 嘗試使用數組來簡化聲明。
@Retention(RetentionPolicy.RUNTIME)
public @interface MyNode {
String name();
}
並包裝:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyNodes {
MyNode[] value();
}
現在,只需聲明為數組:
@MyNodes({
@MyNode(name = "name1"),
@MyNode(name = "name2")
})
public class MyClass {
}
有趣的是:Java 語言規范的一部分似乎與此相矛盾:
注釋類型聲明上的注釋稱為元注釋。 一個注解類型可以用來注解它自己的聲明。 更一般地,“注釋”關系的傳遞閉包中的循環是允許的。 例如,用另一種注解類型來注解一個注解類型聲明,用前一種類型注解后一種類型的聲明是合法的。 (預定義的元注釋類型包含幾個這樣的循環。)
[ 來源]
但是我得到了一個編譯錯誤(注釋引用本身):
public @interface Funky {
Funky funky();
}
和這個(兩個注釋相互引用):
public @interface Funky {
Monkey monkey();
}
public @interface Monkey {
Funky funky();
}
如果你真的需要這個,你可能想要使用 Sun Java 5 編譯器,這里沒有強制執行此限制。
但也許更好的解決方案是將節點存儲在一個數組中,並讓每個節點都有它的子節點的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.