android反射组件 (一个)java 它们的定义annotation基础知识
它们的定义annotation它由三部分组成: 它们的定义annotation、使用annotation班、annotation的处理方法。
一、自己定义annotation
元注解包含下面:
1)@Target 描写叙述注解使用的范围
取值包含:
1.CONSTRUCTOR:用于描写叙述构造器
2.FIELD:用于描写叙述域
3.LOCAL_VARIABLE:用于描写叙述局部变量
4.METHOD:用于描写叙述方法
5.PACKAGE:用于描写叙述包
6.PARAMETER:用于描写叙述參数
7.TYPE:用于描写叙述类、接口(包含注解类型) 或enum声明
2) @Retention 定义了注解被保留的时间段
取值包含:
1.SOURCE:在源文件里有效(即源文件保留)
2.CLASS:在class文件里有效(即class保留)
3.RUNTIME:在执行时有效(即执行时保留)
3)@Documented 能否够被工具文档化
4)@Inherited 注解能否够被子类继承
实例代码:
- @Target(ElementType.FIELD)
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- public @interface FruitName {
- public String value() default "";
- }
- @Target(ElementType.FIELD)
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- public @interface FruitColor {
- public enum Color {BULE, RED, GREEN}
- public Color fruitColor() default Color.GREEN;
- }
二、使用annotation的类
实例代码:
- public class Apple {
- @FruitName("Apple")
- private String appleName;
- @FruitColor(fruitColor=FruitColor.Color.RED)
- private String appleColor;
- public void setAppleColor(String appleColor) {
- this.appleColor = appleColor;
- }
- public String getAppleColor() {
- return appleColor;
- }
- public void setAppleName(String appleName) {
- this.appleName = appleName;
- }
- public String getAppleName() {
- return appleName;
- }
- public void displayName(){
- System.out.println("水果的名字是: "+ appleName + " 水果的颜色是:"+ appleColor);
- }
- }
三、annotation处理方法
实例代码:
- public class FruitInfoUtil {
- public static void getFruitInfo(Object obj){
- Class<?
> clazz = obj.getClass();
- Field[] fields = clazz.getDeclaredFields();
- for(Field field : fields){
- if(field.isAnnotationPresent(FruitName.class)){
- FruitName fruitName = (FruitName)field.getAnnotation(FruitName.class);
- try {
- field.setAccessible(true);
- field.set(obj, fruitName.value());
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }else if(field.isAnnotationPresent(FruitColor.class)){
- FruitColor fruitColor = (FruitColor)field.getAnnotation(FruitColor.class);
- try {
- field.setAccessible(true);
- field.set(obj, fruitColor.fruitColor().toString());
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
LAST: main方法
- public class Main {
- public static void main(String[] args) {
- Apple apple = new Apple();
- FruitInfoUtil.getFruitInfo(apple);
- apple.displayName();
- }
- }
执行结果:
水果的名字是: Apple 水果的颜色是:RED
上传下别人总结的annotation的一张图,很直观
版权声明:本文博客原创文章,博客,未经同意,不得转载。
android反射组件 (一个)java 它们的定义annotation基础知识的更多相关文章
- JAVA面试题集之基础知识
JAVA面试题集之基础知识 基础知识: 1.C 或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就 ...
- 总结了零基础学习Java编程语言的几个基础知识要点
很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面 初学者先弄清这 ...
- Java中实现异常处理的基础知识
Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...
- 要成为一个 Java 架构师得学习哪些知识?
作者:zhuqz链接:https://www.zhihu.com/question/29031276/answer/54631312来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- java安全学习-环境准备/基础知识
补java的坑,开始! 1.Intellij一些快捷键 intell常用快捷键: ctrl+n 快速查找定位类的位置 ctrl+q 快速查看某个类的文档信息 shift + F6 快速类.变量重命名 ...
- Java IO(1)基础知识——字节与字符
正所谓怕什么来什么,这是知名的“墨菲定律”.Java基础涵盖各个方面,敢说Java基础扎实的人不是刚毕业的学生,就是工作N年的程序员.工作N年的程序员甚至也不敢人人都说Java基础扎实,甚至精通,往往 ...
- Java 面试知识点解析(一)——基础知识篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- 【Java面试】1、基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充. 源码分享:https: ...
- Java网络编程一:基础知识详解
网络基础知识 1.OSI分层模型和TCP/IP分层模型的对应关系 这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍. 2.七层模型与协议的对应关系 网络层 ------------ ...
随机推荐
- 【48.47%】【POJ 2524】Ubiquitous Religions
Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 32364 Accepted: 15685 Description There a ...
- 【27.91%】【codeforces 734E】Anton and Tree
time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Java解析HTML之HTMLParser使用与详解 分类: C_OHTERS 2014-05-19 21:46 2309人阅读 评论(0) 收藏
转自:http://free0007.iteye.com/blog/1131163 HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索.对于初学者还是要 ...
- ENVI显示GDAL创建GeoTiff文件的一个问题及其思考
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用gdal创建一个100*100的红色的geotiff图像,代码如下: #include <assert.h& ...
- 逐步把Nginx及Redis引入项目组之负载均衡技术调研初版总结
本篇以一个Nginx服务.两个Tomcat服务.一个Redis搭建一个负载均衡环境,由于就一台电脑暂以随机分配client请求策略开展,详细工作中推荐以IP地址来实现client请求的动态负载策略.省 ...
- ios开发级联菜单(利用父子控制器--两个菜单封装为两个子控制器来实现)
一:1:级联菜单可以使用两个tableView来实现,也可以利用父子控制器,两个控制器来实现,根视图控制器作为两个控制器的父控制器,来管理两个子控制器.2:将左右菜单分别交给两个控制器去管理,对于一些 ...
- 【u226】查单词
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 全国英语四级考试就这样如期到来了.可是小Y依然没有做好充分的准备.为了能够大学毕业,可怜的小Y决定作弊 ...
- 【codeforces 782C】Andryusha and Colored Balloons
[题目链接]:http://codeforces.com/contest/782/problem/C [题意] 给你一棵树 让你满足要求 ->任意相连的3个节点的颜色不能相同 的情况下进行染色 ...
- 第三方微信支付,WAP、H5、APP、公众号支付的区别
你说一个微信支付被腾讯搞了N个版本出来,是技术问题还收费原因不得而知.公众号支付,H5(wap)支付,APP支付.看得小编一头雾水. 带点N个疑问? 1.公众号支付是在公众号里支付,支众号里引入的三方 ...
- 判断软件的闲置时间(使用Application.OnMessage过滤所有键盘鼠标消息)
GetLastInputInfo是检测系统输入的,应用到某个程序中不合适! 此问题有二种解法来监控输入消息: 1.用线程级HOOK,钩上MOUSEHOOK与KEYBOARDHOOK 2.在Applic ...
