美文网首页
Java的注解

Java的注解

作者: 钢铁大郭 | 来源:发表于2021-07-28 21:46 被阅读0次

本文翻译自GeeksforGeeks - Annotation in Java,侵删

什么是注解

注解用于提供一个程序的辅助信息。

注解都是“@”开头 注解不对程序做任何改动 注解可以帮助程序的方法、变量等元素关联其元信息 注解不是注释! 注解可以被编译器识别,根据注解的含义进行编译

class Base{
  public void display(){
      System.out.println("Base display()");
  }
}
class Derived extends Base{
  @Override
  public void display(int x){
      System.out.println("Derived display(int )");
  }

  public static void main(String args[]){
      Derived obj = new Derived();
      obj.display();
  }
}

Output:

10: error: method does not override or implement
    a method from a supertype

如果我们将参数int x 或者@Override移除,那么程序可以成功编译。

注解的种类

注解有三种

标记注解 - Maker Annotation

只是用来标记一个声明,没有成员和数据。因此,只要有注解的Signature存在就可以用了。

@Override就是一个标记注解。

单值注解 - Single Value Annotation

这种注解只有一个成员,并且可以简单的给这个成员赋值。赋值的时候,我们只要在括号里面传入一个值,不需要知道这个成员名。

@TestAnnotation("Hey!")

完整注释 - Full Annotation

这种注解是单值注解的升级版,多个成员的注解。我们需要知道这些成员名

@TestAnnotation(name="钢铁大郭", value="是个coder")

注解的用法

类型注释 - Type Annotation

注解可以使用在任何注明了类型的地方。比如,方法返回值。

// 演示Type注解
  
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
  
// 使用Target来注解一个类型
@Target(ElementType.TYPE_USE)
// 声明一个简单的标记注解
@interface TypeAnnoDemo{}
  
public class Main {
    public static void main(String[] args) {
  
        // 注解这个String类型的返回值
        @TypeAnnoDemo String string = "I am annotated with a type annotation";
        System.out.println(string);
        abc();
    }
  
    // 注解一个返回值
    static @TypeAnnoDemo int abc(){
        System.out.println("This function's  return type is annotated");
        return 0;
    }
}
  
// This code is contributed by Charchit Kapoor

Output:

I am annotated with a type annotation
This function's  return type is annotated
重复注解 - Repeating Annotation

注解可以使用一次或多次。

注解必须要用@Repeatble注解过的,java.lang.annotationpackage里面。

一个是容器注解,一个是元素注解,元素注解要在容器注解里面。

import java.lang.annotation.Annotation;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
  
// Words是一个被Repeatable修饰的可重复注解
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(MyRepeatedAnnos.class)
@interface Words{
    String word() default "Hello";
    int value() default 0;
}
  
// 创建容器注解
@Retention(RetentionPolicy.RUNTIME)
@interface MyRepeatedAnnos{
    Words[] value();
}

public class Main {
       
    // 重复使用@Words
    @Words(word = "First", value = 1)
    @Words(word = "Second", value = 2)
    public static void newMethod(){
        Main obj = new Main();
  
        try{
            Class<?> c = obj.getClass();
  
            // 反射获取方法
            Method m = c.getMethod("newMethod");
              
            // 使用反射找到重复注解然后打印
            Annotation anno = m.getAnnotation(MyRepeatedAnnos.class);
            System.out.println(anno);
        }catch (NoSuchMethodException e){
            System.out.println(e);
        }
    }
    public static void main(String[] args) {
        newMethod();
    }
}
  
// This code is contributed by Charchit Kapoor

Output:

@MyRepeatedAnnos(value={@Words(value=1, word="First"), @Words(value=2, word="Second")})

相关文章

  • 菜鸟学服务端技术----Spirng基础

    注解 Java基础加强总结(一)——注解(Annotation) java中的注解是如何工作的? java 注解 ...

  • 自定义注解

    java annotation基础 java注解分为标准注解和元注解。 标准注解是java为我们提供的预定义的注解...

  • Java原生注解和Spring注解的说明

    注解 java 原生注解 Spring 中的注解 一 Java原生注解 Java注解是在JDK1.5以后引入的新特...

  • Java注解的使用

    Java注解的使用 参考 廖雪峰java教程 使用注解 什么是注解(Annotation)?注解是放在Java源码...

  • Java 注解

    JAVA注解 Java 自带注解(系统注解) @Override 表示重写注解 @Deprecated 表示过时的...

  • 1.8 Java 注解annotation

    1.1 注解声明 Java注解Annotation,有声明注解和元注解 元注解:Java提供的元注解,所谓元注解就...

  • Java注解学习总结(脑图)

    注解的提取测试:定义注解: 测试注解提取: 参考:《Java编程思想》java注解

  • Java注解(三)—元注解

    元注解就是注解的注解,是Java内置的注解。Java提供四个元注解:@Retention @Target @Doc...

  • Java注解简介篇

    摘要 本文详细介绍java注解是什么,如何声明java注解,如何解析java注解。最后介绍JDK提供的几大基本注解...

  • java 中的注解

    java 中的注解 使用的时候可以参考秒懂,Java 注解 (Annotation)你可以这样学 Java 注解用...

网友评论

      本文标题:Java的注解

      本文链接:https://www.haomeiwen.com/subject/hyzzmltx.html