今天回顾在Java8中注解增强的新特性,类型注解和重复注解。
什么是类型注解?
在Java8之前,注解只能用于声明中使用注解,比如定义类的时候、定义方法的时候或者bean中的变量上,但是没法在方法内使用。
在Java8中,注解可以被用到任何使用类型的地方,比如说创建实体(new)、类型转化、implements和throws。这种可以用于类型声明和类型使用的注解,被称为类型注解。Java8 ElementType 源码TYPE_USE ,任意使用类型的地方。
TYPE_PARAMETER,任何声明类型的地方。
类型注解示例如下:
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface Temp {
}
类型注解的意义?
类型注解是一套可定义拓展的类型检查框架,可以通过类型注解实现非常轻量级的自定义类型检查插件,完全不需要第三方的插件。
什么是重复注解?
重复注解,其实就是同一个注解可以多次使用。
public class Temp {
@Rule(rule = "a")
@Rule(rule = "b")
String value;
}
如何定义可重复注解呢?
代码如下,重复注解的核心是@Repeatable(Rules.class)。
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
@Repeatable(Rules.class)
public @interface Rule {
String rule() default "";
}
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface Rules {
Rule[] value();
}
使用示例:
public class Temp {
@Rule(rule = "a")
@Rule(rule = "b")
String value;
}
重复注解的意义?
重复注解更多是对过去注解类型写法的一个优化、一个简化。上面示例的实现在Java7中如下:
@Target({ElementType.FIELD})
public @interface Rule {
String rule() default "";
}
@Target({ElementType.FIELD})
public @interface Rules {
Rule[] value();
}
public class Temp {
@Rules({@Rule(rule = "a"), @Rule(rule = "b")})
String value;
}
可以看出这个写法是非常繁琐的。
总结
注解的使用越来越频繁,Java围绕着注解引入的类型检查框架,可以极大的增强了代码检查、代码分析的能力,对于工作效率的提高有非常重要的意义。这个新特性的意义也是非常重大的。