java annotation应用_java Annotation的应用

一、Annotation 示例

Override Annotation

1 @Override2 public void onCreate(Bundle savedInstanceState);

二、Annotation 概念及作用

1 概念

An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and packages may be annotated. Annotations have no direct effect on the operation of the code they annotate.

能够添加到 Java 源代码的语法元数据。类、方法、变量、参数、包都可以被注解,可用来将信息元数据与程序元素进行关联。Annotation 中文常译为“注解”。

2 作用

a. 标记,用于告诉编译器一些信息

b. 编译时动态处理,如动态生成代码

c. 运行时动态处理,如得到注解信息

三、Annotation 分类

1 标准 Annotation

包括 Override, Deprecated, SuppressWarnings,标准 Annotation 是指 Java 自带的几个 Annotation,上面三个分别表示重写函数,不鼓励使用(有更好方式、使用有风险或已不在维护),忽略某项 Warning

2 元 Annotation

@Retention, @Target, @Inherited, @Documented,元 Annotation 是指用来定义 Annotation 的 Annotation,在后面 Annotation 自定义部分会详细介绍含义

3 自定义 Annotation

自定义 Annotation 表示自己根据需要定义的 Annotation,定义时需要用到上面的元 Annotation

这里只是一种分类而已,也可以根据作用域分为源码时、编译时、运行时 Annotation,后面在自定义 Annotation 时会具体介绍。

四、Annotation 自定义

1 调用

1 public classApp {2

3 @MethodInfo(4 author = “trinea.cn+android@gmail.com”,5 date = "2014/02/14",6 version = 2)7 publicString getAppName() {8 return "trinea";9 }10 }

这里是调用自定义 Annotation——MethodInfo 的示例,MethodInfo Annotation 作用为给方法添加相关信息,包括 author、date、version。

2 定义

1 @Documented2 @Retention(RetentionPolicy.RUNTIME)3 @Target(ElementType.METHOD)4 @Inherited5 public @interfaceMethodInfo {6

7 String author() default "trinea@gmail.com";8

9 String date();10

11 int version() default 1;12 }

这里是 MethodInfo 的实现部分

(1). 通过 @interface 定义,注解名即为自定义注解名

(2). 注解配置参数名为注解类的方法名,且:

a. 所有方法没有方法体,没有参数没有修饰符,实际只允许 public & abstract 修饰符,默认为 public ,不允许抛异常

b. 方法返回值只能是基本类型,String, Class, annotation, enumeration 或者是他们的一维数组

c. 若只有一个默认属性,可直接用 value() 函数。一个属性都没有表示该 Annotation 为 Mark Annotation

(3). 可以加 default 表示默认值

3 元 Annotation

@Documented 是否会保存到 Javadoc 文档中

@Retention 保留时间,可选值 SOURCE(源码时),CLASS(编译时),RUNTIME(运行时),默认为 CLASS,值为 SOURCE 大都为 Mark Annotation,这类 Annotation 大都用来校验,比如 Override, Deprecated, SuppressWarnings

@Target 可以用来修饰哪些程序元素,如 TYPE, METHOD, CONSTRUCTOR, FIELD, PARAMETER 等,未标注则表示可修饰所有

@Inherited 是否可以被继承,默认为 false

五、Annotation 解析

1 运行时 Annotation 解析

(1) 运行时 Annotation 指 @Retention 为 RUNTIME 的 Annotation,可手动调用下面常用 API 解析

method.getAnnotation(AnnotationName.class);

method.getAnnotations();

method.isAnnotationPresent(AnnotationName.class);

其他 @Target 如 Field,Class 方法类似

getAnnotation(AnnotationName.class) 表示得到该 Target 某个 Annotation 的信息,因为一个 Target 可以被多个 Annotation 修饰

getAnnotations() 则表示得到该 Target 所有 Annotation

isAnnotationPresent(AnnotationName.class) 表示该 Target 是否被某个 Annotation 修饰

(2) 解析示例如下

1 public static voidmain(String[] args) {2 try{3 Class cls = Class.forName("cn.trinea.java.test.annotation.App");4 for(Method method : cls.getMethods()) {5 MethodInfo methodInfo =method.getAnnotation(6 MethodInfo.class);7 if (methodInfo != null) {8 System.out.println("method name:" +method.getName());9 System.out.println("method author:" +methodInfo.author());10 System.out.println("method version:" +methodInfo.version());11 System.out.println("method date:" +methodInfo.date());12 }13 }14 } catch(ClassNotFoundException e) {15 e.printStackTrace();16 }17 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙和安卓,到底有什么区别?

对于开发者来说两个最关键的点值得关注:一个是 Beta 版的开发工具,一个是开源网站。开源网站在开发者大会上宣布将 HarmonyOS源代码捐赠给中国开放原子开源基金会,并在大会上公布了鸿蒙系统的开源路线。OpenHarmony 官方源码地址:…

错题集03

(选择一项) 3A: B: C: D: 正确答案是 B解析:LinkedList是实现List,Collection接口,是链表方式进行构建的,根据开发要求不同,可以使用LinkedList实现栈(先进先出)和堆(先进后出)这样的数据结构。(选择一项) 4A: B: C: D: 正确答案是 C解析:由于Hashtable是线程…

从零开始学python人工智能课程_从零开始如何学习人工智能?

想要学习人工智能?这里有一条完整路径资源在本文中,《Analytics India》杂志给出了学习AI的最佳途径。...科技领域的天平正在向人工智能倾斜,IT领域的技术人员正在将AI应用到现有产品中。但是对于企业来说, AI人才才是关键。企业培…

项目管理基础:软件开发的方法介绍

软件开发方法主要有结构化方法、原型化方法、面向对象开发方法、敏捷方法。1、结构化方法结构化方法由结构化分析、结构化设计、结构化程序设计组成,它是一种面向数据流的开发方法。结构化分析:依据分解与抽象的原则,按照系统中数据处理的流程…

类加载器子系统的作用

类加载器子系统的作用

Magento Block设计分析(深入分析)

Magento中Block是一个很重要的组件,它在Block中充当非常重要的角色,下面我们来分析一下Magento中Block是怎样设计的,我们应该怎样使用这个重要的角色。1、Magento Block类图: 图1: 继承Varien_Object的对象都有一个_data类变量,用…

JAVA输出x和y和z_JAVA实例:输入三个整数x,y,z,请把这三个数由小到大输出-吾爱编程网...

今天为大家分享一个java经典实例输入三个整数x,y,z,请把这三个数由小到大输出,相信很多初学者都会学到这道题目,接下来吾爱编程为大家介绍一下程序的相关写法,有需要的小伙伴可以参考一下:1、题目:输入三个整数x,y,z,请…

软件项目管理相关概念介绍笔记

1、成本估算由于软件项目具有可见性差、难定量化的特点,一般情况下很难在项目完成前准确的评估软件项目开发的工作量和费用。通常会根据以往开发类似项目的经验来进行成本估算。也可以将整个项目划分为若干个子系统或按照软件的生命周期的各个阶段分别进行费用估算&…

python爬取微博热搜_Python 超简单爬取微博热搜榜数据

微博的热搜榜对于研究大众的流量有非常大的价值。今天的教程就来说说如何爬取微博的热搜榜。 热搜榜的链接是:用浏览器浏览,发现在不登录的情况下也可以正常查看,那就简单多了。使用开发者工具(F12)查看页面逻辑,并拿到每条热搜的…

LeetCode14 Longest Common Prefix

题意: Write a function to find the longest common prefix string amongst an array of strings. (Easy) 这两天实验室项目太忙了, 老板各种活,只能挑着先水几道easy题,这两个题是昨天做的没来得及写总结。 分析: 暴…

类加载器ClassLoader的角色

类加载器ClassLoader的角色

软件项目管理:进度管理相关概念介绍

软件项目管理当中,项目进度的合理安排是如期完成软件项目的重要基础,也是合理分配资源的重要依据。项目进度安排是项目管理工作当中非常重要的组成部分。软件开发项目进度安排的方式:1、系统最终交付日期已经确定,软件开发部门必须…

ios开发 多人语音聊天_手游语音市场的现状、机遇与挑战

文/手游那点事小鱼原创2014年持续火热的手游市场成就了一大批企业的上市梦,同时也在大环境下产生了对系列手游增值服务的需求。基于玩家对手游社交性的需求,以及借鉴传统端游,页游中成功的社交体系,手游市场逐步出现了对手游语音的…

linux 下运行 tomcat

一开始找不到表名,原来mysql 表名区分大小写。 修改参数 lower_case_table_names1 成功运行后不能通过浏览器访问! 开启8080端口 一、关闭防火墙 firewall-cmd --state 查看状态 [rootVM_7_88_centos /]# firewall-cmd --state running [rootVM_7_88…

软件项目管理:软件工具与开发环境相关知识介绍

1、软件工具相关名词概念软件工具:用来辅助软件开发、运行、维护、管理等过程中的活动软件。软件开发环境:是指支持软件产品开发的软件系统,它由软件工具集和环境集成机制构成。软件工具集:包括支持软件开发相关过程、活动、任务的…

apollo java客户端_携程配置中心Apollo的Java客户端API的使用

一、SpringBoot集成1.发布配置信息设置本机为DEV环境:Linux在/opt/settings/server.properties增加配置envDEV,windows在c:\opt\settings\server.properties图1 在apollo portal上新建项目后,默认就有了application命名空间。在DEV环境下新建…

JNI----Native本地方法接口

Native本地方法接口 JNI:Java Native Interface 本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C程序 native:凡是带native关键字的,说明java的作用范围达不到了,会去调用底层c语言的库&#xff01…

python的flag是什么意思_网上老说的flag是什么意思

近些年,国内的网络发展速度还是很快的,大家可以通过网络了解很多的东西,因此网络上也有很多热词开始流行起来,其中flag算是十分流行的一个词汇,网上老说的flag是什么意思?立个flag是什么梗?可能还有一些朋友并不是很…

项目管理基础:系统分析相关概念介绍

1、系统分析的主要任务系统分析主要任务是对现行的系统进一步详细调查,将调查得到的资料集中,对组织内部整体管理状况和信息处理过程进行分析,为系统开发提供所需要的资料,并提交系统方案说明书。2、系统分析的主要阶段系统分析主…

java线程池和线程实例化_浅谈Java 线程池原理及使用方式

一、简介什么是线程池?池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用。java中有线程池、连接池等等。线程池就是在系统启动或者实例化池时创建一些空闲的线程,等待工作调度,执…