自定义注解

自定义注解,第1张

概述自定义注解:1.成员类型是受限的,合法的类型包括原始类型及String,Calss,Anootation,Enumreation2.如果注解只有一个成员,则成员名必须取名为Value(),在使用的时可

自定义注解:
1.成员类型是受限的,合法的类型包括原始类型及String,Calss,Anootation,Enumreation
2.如果注解只有一个成员,则成员名必须取名为Value(),在使用的时可以忽略成员名和赋值号(=)
3.没有成员的注解称为标识注解

public @interface Description{//使用@interface关键字注解
String name();//成员以无参无异常方式声明
String author();
int age() default 19;//可以用default为成员变量指定一个默认值
}

元注解
@Target({ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.METHOD})
// Target 注解的作用域 CONSTRUCTOR 构造方法声明,FIELD 字段声明,LOCAL_VARIABLE 局部变量声明 ,METHOD 方法声明,PACKAGE 包声明,ParaMETER 参数声明,TYPE 类接口。
@Retention(RetentionPolicy.RUNTIME)
//Retention 生命周期——SOURCE 只在源码显示,编译时会丢弃;CLASS 编译时会记录到class中,运行时忽略;RUNTIME 运行时存在,可以通过反射读取。
@inherited
//inherited 允许子类继承
@documented
//documented 生成javadoc的时候包含注解

下面以一个demo演示解析注解

package com.description.demo;import java.lang.annotation.documented; java.lang.annotation.ElementType; java.lang.annotation.inherited; java.lang.annotation.Retention; java.lang.annotation.RetentionPolicy; java.lang.annotation.Target;//注解的作用域@Target({ElementType.METHOD,ElementType.TYPE})注解的生命周期@Retention(RetentionPolicy.RUNTIME)注解是否允许被继承@inherited是否生成注解Javadoc文档子注解@documentedpublic @interface Description {    String desc();    String auth()default"rongrong";}

接口

public  Person {    String name();    int age();    voID say();}

实现类

 com.description.demo;@Description(desc = "class annotation")class Child implements Person {    @OverrIDe    @Description(desc = "method annotation")    public String name() {         Todo auto-generated method stub        return null;    }    @OverrIDe     age() {        return 0 say() {         Todo auto-generated method stub    }}

测试类:

/** *  */ java.lang.annotation.Annotation; java.lang.reflect.Method; org.junit.Test; * @author administrator *    解析注解 class MainTest {        @SuppressWarnings("unchecked")    @Test     run(){        try {            通过反射加载实体类            Class c = Class.forname("com.description.demo.Child");            找到类上面的注解            boolean isExist= c.isAnnotationPresent(Description.);            if (isExist) {                拿到实体类,一定强转为注解类型,反则找不到                Description d = (Description) c.getAnnotation(Description.);                System.out.println(d.desc());            }            找到方法上的注解            Method[] method = c.getmethods();            for (Method ms : method) {                isExist = ms.isAnnotationPresent(Description.);                 (isExist) {                    Description d = ms.getAnnotation(Description.);                    System.out.println(d.desc());                }                另一种方法                Annotation[] annotation = ms.getAnnotations();                 (Annotation as : annotation) {                    if (as instanceof Description) {                        String desc = ((Description) as).desc();                        System.out.println(desc);                    }                }            }        } catch (ClassNotFoundException e) {             Todo auto-generated catch block            e.printstacktrace();        }    }}

 

总结

以上是内存溢出为你收集整理的自定义注解全部内容,希望文章能够帮你解决自定义注解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1226850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存