Java8新特性之Annotations(註解)

在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 {}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章