重复注解与类型注解

傷城~ 2022-05-17 03:18 360阅读 0赞

Java 8对注解处理提供了两点改进:可重复的注解及可用于类 型的注解

重复注解:

即允许在同一申明类型(类,属性,或方法)前多次使用同一个类型注解

在java8 以前,同一个程序元素前最多只能有一个相同类型的注解;如果需要在同一个元素前使用多个相同类型的注解,则必须使用注解“容器”。

java8新增了重复注解,其使用方式为:

  1. @Repeatable(MyAnnotations.class)
  2. @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
  3. @Retention(RetentionPolicy.RUNTIME)
  4. public @interface MyAnnotation {
  5. String value() default "java";
  6. }
  7. @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
  8. @Retention(RetentionPolicy.RUNTIME)
  9. public @interface MyAnnotations {
  10. MyAnnotation[] value();
  11. }
  12. public class TestAnnotation {
  13. @MyAnnotation("hello")
  14. @MyAnnotation("world")
  15. public void show() {
  16. }
  17. @Test
  18. public void test1() throws Exception {
  19. Class<TestAnnotation> aClass = TestAnnotation.class;
  20. Method show = aClass.getMethod("show");
  21. MyAnnotation[] annotations = show.getAnnotationsByType(MyAnnotation.class);
  22. for (MyAnnotation my : annotations) {
  23. System.out.println(my.value());
  24. }
  25. }
  26. }

重复注解只是一种简化写法,这种简化写法是一种假象:多个重复注解其实会被作为“容器”注解的value成员 的数组元素处理。

java8新增的类型注解

Java8为ElementType枚举增加了TYPE_PARAMETER、TYPE_USE两个枚举值,从而可以使用@Target(ElementType_TYPE_USE)修饰注解定义,这种注解被称为类型注解,可以用在任何使用到类型的地方。

在java8以前,注解只能用在各种程序元素(定义类、定义接口、定义方法、定义成员变量…)上。从java8开始,类型注解可以用在任何使用到类型的地方。
TYPE_PARAMETER:表示该注解能写在类型参数的声明语句中。 类型参数声明如:
TYPE_USE:表示注解可以再任何用到类型的地方使用,比如允许在如下位置使用:

  1. 创建对象(用new关键字创建)
  2. 类型转换
  3. 使用implements实现接口
    4.使用throws声明抛出异常

eg:

  1. @Target(ElementType.TYPE_USE)
  2. @interface NotNull{ }
  3. //定义类时使用
  4. @NotNull
  5. public class TypeAnnotationTest implements Serializable //在implements时使用
  6. {
  7. //在方法形参中使用
  8. public static void main(@NotNull String [] args) throws @NotNull FileNotFoundException //在throws时使用
  9. {
  10. Object obj="fkjava.org";
  11. //使用强制类型转换时使用
  12. String str=(@NotNull String) obj;
  13. //创建对象时使用
  14. Object win=new (@NotNull) JFrame("疯狂软件");
  15. }
  16. //泛型中使用
  17. public void foo(List<@NotNull String> info) { }
  18. }
  19. 这种无处不在的注解,可以让编译器执行更严格的代码检查,从而提高程序的健壮性。
  20. 需要指出的是,上面程序虽然使用了大量@NotNull注解,但是这些注解暂时不会起任何作用——因为没有为这些注解提供处理工具,
  21. java8本身并没有提供,要想这些注解发挥作用,需要开发者自己实现,或者使用第三方提供的工具。

学习视频http://www.gulixueyuan.com/my/course/56

参考资料:《java8简明教程》

发表评论

表情:
评论列表 (有 0 条评论,360人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java8-重复注解类型注解

    可重复注解 自从Java 5中引入 注解 以来,注解开始变得非常流行,并在各个框架和项目中被广泛使用。不过注解有一个很大的限制是:在同一个地方不能多次使用同一个注解 J

    相关 重复注解类型注解

    Java 8对注解处理提供了两点改进:可重复的注解及可用于类 型的注解 重复注解: 即允许在同一申明类型(类,属性,或方法)前多次使用同一个类型注解 在java8 以