[英]Java - Why is Enum<E> not allowed as Annotation member?
它說:
原始
串
類
一個枚舉
另一個注釋
上面任何一個的數組
只有這些類型作為注釋成員是合法的,為什么通用的Enum不能成為注釋的成員?
例如 :
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Param {
Enum value();
}
這是不允許的。 但是Enum是一個常數不是嗎? 當您使用@Param(XXX)
,填寫Enum
,將決定@Param(XXX)
(這意味着它是常量)。 為什么只允許成為特定枚舉?
我想要做的是制作一個接收任何枚舉的注釋:
// for example
@Param(value = AEnum.ABC)
@Param(value = BEnum.TTT)
@Param(value = CEnum.OOO)
我希望以上所有都是合法的。
雖然每個enum
類型都繼承自java.lang.Enum
,但Enum
類型本身不是enum
類型。 類似地,雖然每個注釋類型都繼承自java.lang.annotation.Annotation
,但Annotation
類型本身不是注釋類型。
沒有技術原因,在類文件中,每個實際值都將包含對其類型的引用。 因此,將注釋屬性聲明為Object
並動態發現實際值的類型是技術上可行的,但正式規范不允許這樣做。
順便說一句,枚舉常量也不是編譯時常量。 所以雖然你可以聲明一個編譯時常量,如final String FOO = "some string";
並在@Name(value=FOO)
這樣的注釋中引用它,你不能對enum
常量做同樣的事情。 您只能引用enum
類型本身聲明的常量,如EnumType.NAME
。 這也是它在規范中如何正式定義的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.