天天看點

JAVA8新特性--類型注解與重複注解類型注解重複注解

類型注解與重複注解都是在自定義注解的基礎上,建議先了解下自定義注解,請戳:自定義注解及元注解介紹

類型注解

java8中為ElementType新增了兩個枚舉值:TYPE_PARAMETER和TYPE_USE。對應的含義:

TYPE_PARAMETER

表示該注解能使用在自定義類型參數(參數的自定義類型可以是javaBean或者枚舉等)的聲明語句中。例子如下:

先聲明個使用TYPE_PARAMETER參數的自定義注解@myAnno

@Target({ElementType.TYPE_PARAMETER})
@interface myAnno{}
           

定義一個方法使用自定義類型MyClass

public String getMyClassInfo(MyClass cls){
    return null;
}
           

下面語句則是在自定義類型MyClass的聲明使用了@myAnno注解

class  MyClass<@myAnno String>{}
           

TYPE_USE

表示該注解能使用在使用類型的任意語句中。

先定義一個自定義注解:

@Target({ElementType.TYPE_USE})
@interface myAnnoUse{}
           

下面示範四種情形:

  • 建立執行個體時使用
MyClass<String> aClass = new @myAnnoUse MyClass<>();
           
  • 類型強轉時使用
Object o = "test";
String str = (@myAnnoUse String) o;
           
  • 方法形參中使用
public String getUser(@myAnnoUse String  name, Integer age){
    return null;
}
           
  • 泛型中使用
public String getClasses(List<@myAnnoUse User> list){
    return null;
}
           

重複注解

即可以在同一方法、屬性、類等類型中多次使用同一個注解。此特性相當于對JAVA8之前的重複注解在編譯層面的增強,JAVA8實作此特性主要依賴于@Repeatable注解。

JAVA8之前的寫法

定義一個重複注解:

@interface MyRepAnno{
    String value();
}
@interface MyRepAnnos{
    MyRepAnno[] value();
}
           

使用此注解:

@MyRepAnnos({@MyRepAnno(""),@MyRepAnno("")})
class TestMyClass{}
           

JAVA8中的寫法

定義一個重複注解:

@Repeatable(MyRepAnnos.class)
@interface MyRepAnno{
    String value();
}
@interface MyRepAnnos{
    MyRepAnno[] value();
}
           

使用此注解:

@MyRepAnno("")
@MyRepAnno("")
class TestMyClass{}
           

上面例子中發現JAVA8中定義重複注解與JAVA7相比隻是多了個@Repeatable,使用重複注解的地方JAVA8則比之前的寫法更簡單友善,可讀性更強。