在Java 8中支持多重註解了,先看個例子來理解一下是什麼意思。
首先定義一個包裝類Hints註解用來放置一組具體的Hint註解:
@interface Hints {
Hint[] value();
}
@Repeatable(Hints.class)
@interface Hint {
String value();
}
Java 8允許我們把同一個類型的註解使用多次,只需要給該註解標註一下@Repeatable
即可。
例 1: 使用包裝類當容器來存多個註解(老方法)
@Hints({@Hint("hint1"), @Hint("hint2")})
class Person {}
例 2:使用多重註解(新方法)
@Hint("hint1")
@Hint("hint2")
class Person {}
第二個例子裏java編譯器會隱性的幫你定義好@Hints註解,瞭解這一點有助於你用反射來獲取這些信息:
Hint hint = Person.class.getAnnotation(Hint.class);
System.out.println(hint); // null
Hints hints1 = Person.class.getAnnotation(Hints.class);
System.out.println(hints1.value().length); // 2
Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class);
System.out.println(hints2.length); // 2
即便我們沒有在 Person
類上定義 @Hints
註解,我們還是可以通過 getAnnotation(Hints.class)
來獲取 @Hints
註解,更加方便的方法是使用 getAnnotationsByType
可以直接獲取到所有的@Hint
註解。
另外Java 8的註解還增加到兩種新的target上了:
@Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
@interface MyAnnotation {}