博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java自定义注解及应用
阅读量:6427 次
发布时间:2019-06-23

本文共 1822 字,大约阅读时间需要 6 分钟。

hot3.png

前沿

java目前只内置了三种标准注解

注解 解释
表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误提示
如果程序员使用了注解为它的元素,那么编译器会发出警告信息
@Suppress Warnings 关闭不当的编译器警告信息。在Java SE5之前的版本中,也可以使用该注解,不过会被忽略不起作用

四种元注解,元注解专职负责注解其他的注解

元注解 解释 可选参数
表示该注解可以用于什么地方。可能的ElementType参数包括 CONSTRUCTOR:构造器的声明,FIELD:域声明(包括enum实例),LOCAL_VARIABLE:局部变量声明,METHOD:方法声明, PACKAGE:包声明,PARAMETER:参数声明,TYPE:类,接口(包括注解类型)或enum声明
@Retention 表示需要在什么级别保存该注解信息。可选的RententionPolicy参数包括 SOURCE:注解将被编译器丢弃器
CLASS:注解在class文件中可用,但会被VM丢弃
@Document 将此注解包含在javadoc中
@Inherited 允许子类继承父类中的注解

自定义注解

  • 第一步,添加自定义注解。
@Target({ElementType.METHOD,ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Description {    String desc();    String author();    int age() default 18;}
  • 第二步,使用注解
@Description(desc="i am Color",author="boy",age=18)public String Color() {    return "red";}
  • 分析 通过反射获取类 、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑。

  • 测试

测试类上的注解

public class ParseAnn {    public static void main(String[] args) {        try {            // 使用类加载器加载类            Class c = Class.forName("com.test.Child");            // 找到类上面的注解            boolean isExist = c.isAnnotationPresent(Description.class);            // 上面的这个方法是用这个类来判断这个类是否存在Description这样的一个注解            if (isExist) {                // 拿到注解实例,解析类上面的注解                Description d = (Description) c.getAnnotation(Description.class);                System.out.println(d.value());            }        } catch (ClassNotFoundException e) {            e.printStackTrace();        }    }}

解析方法上的注解

//获取所有的方法Method[] ms = c.getMethods();// 遍历所有的方法for (Method m : ms) {    boolean isExist1 = m.isAnnotationPresent(Description.class);    if (isExist1) {        Description d1=m.getAnnotation(Description.class);        System.out.println(d1.value());    }}
  • 注解的应用结构图

参考文献

转载于:https://my.oschina.net/u/3421984/blog/3003619

你可能感兴趣的文章
高中数学与初中数学的接轨点
查看>>
python 安装第三方模块
查看>>
Whitelabel Error Page 专题
查看>>
Spring Data Redis—Pub/Sub(附Web项目源码)
查看>>
RSD和wlwmanifest是什么
查看>>
Linkedin工程师是如何优化他们的Java代码的(转)
查看>>
winfrom 如何保存datagridview中的某一行数据
查看>>
面向领域驱动的应用开发框架Apworks 2.0发布
查看>>
开发自己的Web服务处理程序(以支持Ajax框架异步调用Web服务方法)
查看>>
ref和out
查看>>
黑客教父详解账号泄露全过程:1亿用户已泄露
查看>>
程序员必须软件
查看>>
Canvas里的globalCompositeOperation
查看>>
解决Unable to locate theme engine in module_path: "pixmap"
查看>>
贝叶斯文本分类c#版
查看>>
Centos安装KDE或GNOME
查看>>
Eclipse & IDEA 中常用的快捷键
查看>>
javascript ---IPhone滑动解锁
查看>>
table固定行和表头
查看>>
<每天读一点职场心理学>读书笔记
查看>>