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则比之前的写法更简单方便,可读性更强。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值