首页 > 其他分享 >注解

注解

时间:2022-11-30 17:23:10浏览次数:35  
标签:lang java MyAnnotation import 注解 class

内置的注解

Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。

作用在代码的注解是
@Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
@Deprecated - 标记过时方法。如果使用该方法,会报编译警告。
@SuppressWarnings - 指示编译器去忽略注解中声明的警告。

作用在其他注解的注解(或者说 元注解)是:
@Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。
@Documented - 标记这些注解是否包含在用户文档中。
@Target - 标记这个注解应该是哪种 Java 成员。
@Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)

从 Java 7 开始,额外添加了 3 个注解:
@SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
@FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。
@Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

@Rentention

  • RententionPolicy.SOURCE:Annotation信息仅存在于编译器处理期间,编译器处理完之后就没有该Annotation信息了
  • CLASS:编译器将Annotation存储于类对应的.class文件中。默认行为
  • RUNTIME:编译器将Annotation存储于class文件中,并且可由JVM读入,常用

@Target

指明注解可以放在什么地方,若定义注解时没有Target任何位置都可以用这个注解:

  • ElementType.TYPE:类、接口(包括注释类型)或枚举声明
  • ElementType.FIELD:字段声明(包括枚举常量)
  • ElementType.METHOD:方法声明
  • ElementType.PARAMETER:参数声明

反射使用注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Classname: MyAnnotation
 * @Description: 定义一个注释
 * @Author: Stonffe
 * @Date: 2022/11/30 16:46
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String value() default "hello";
}

/**
 * @Classname: Person
 * @Description:
 * @Author: Stonffe
 * @Date: 2022/11/30 16:51
 */
public class Person {
    @MyAnnotation
    public void nothing(){
        System.out.println("nothing");
    }
    @MyAnnotation(value = "i wirte something here")
    public void something(String name,int age){
        System.out.println("the age of"+name+"is"+name);
    }
}

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Main {
    public static void main(String[] args) throws IOException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Person person = new Person();
        Class<? extends Person> personClass = person.getClass();
        Method nothing = personClass.getMethod("nothing", new Class[]{});
        nothing.invoke(person,new Object[]{});
        MyAnnotation annotation = nothing.getAnnotation(MyAnnotation.class);
        String value1 = annotation.value();
        System.out.println(value1);

        Method something = personClass.getMethod("something", String.class, int.class);
        something.invoke(person,"yukito",18);
        MyAnnotation annotation1 = something.getAnnotation(MyAnnotation.class);
        String value2 = annotation1.value();
        System.out.println(value2);
    }

}

img

标签:lang,java,MyAnnotation,import,注解,class
From: https://www.cnblogs.com/xiaoovo/p/16939136.html

相关文章

  • Dubbo -注解方式和Api方式
    注解方式服务端<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema......
  • Servlet3.1规范翻译 - 注解和可插拔性
    ​​https://github.com/javahongxi​​本文转载自kaitao.hongxi.org注解和可插拔性本章讨论Servlet3.0规范定义的注解和使web应用内使用的框架和库能够可插拔的增强。8.1......
  • aop注解
    注解aop开发步骤1 使用@Aspect标注切面类2 使用@通知注解标注通知方法@Component("myAspect")@Aspect//标注当前MyAspect是一个切面类publicclassMyAs......
  • @Repository相关注解
    @Repository@Repository注解修饰哪个类,则表明这个类具有对对象进行CRUD(增删改查)的功能,而且@Repository是@Component注解的一个派生品,所以被@Repository注解的类可以自动的......
  • 关于@PostConstruct与@PreDestroy注解的使用详解
    一、@PostConstruct和@PreConstruct介绍从JavaEE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct。这两个注解被用来修......
  • Java 注解和反射(六)获取泛型,注解信息
    反射操作泛型**Java采用泛型擦出的机制来引入泛型,Java中的泛型仅仅是给编译器javac使用的,确保数据的安全性和免除强制类型转换问题,但是,一旦编译完成,所有和泛型有关的类......
  • java 通过反射获取类上注解,方法上注解,注解里的值及方法参数
    ****测试demo  git仓库地址: ​​https://github.com/alwaysInRoad/test-annotation-demo.git​​          项目为maven项目,导入时请注意!说明: ......
  • Java 注解和反射(五)创建运行时类的对象
    获取运行时类的完整结构通过反射获取运行时类的完整结构Field,Method,Constructor,Superclass,Interface,Annotation~实现的全部接口~所继承的父类~全部的构造器~全部的方......
  • 写了@Test注解但没有出现绿色运行的标识
    目录​​问题​​​​原因​​​​解决​​问题原因因为类、方法前面没有加上public所以检测不到解决......
  • 浅谈@PostConstruct注解
    目录​​前言:​​​​常见业务背景:​​前言:我们在Spring项目中经常会遇到@PostConstruct注解,可能有的伙伴对这个注解很陌生,出现场景如:首页介绍一下它的用途:@PostConstruct......