它们的定义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  注解能否够被子类继承

   实例代码:

[java] view
plain
copy

  1. @Target(ElementType.FIELD)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. public @interface FruitName {
  5. public String value() default "";
  6. }
  7. @Target(ElementType.FIELD)
  8. @Retention(RetentionPolicy.RUNTIME)
  9. @Documented
  10. public @interface FruitColor {
  11. public enum Color {BULE, RED, GREEN}
  12. public Color fruitColor() default Color.GREEN;
  13. }

二、使用annotation的类

实例代码:

[java] view
plain
copy

  1. public class Apple {
  2. @FruitName("Apple")
  3. private String appleName;
  4. @FruitColor(fruitColor=FruitColor.Color.RED)
  5. private String appleColor;
  6. public void setAppleColor(String appleColor) {
  7. this.appleColor = appleColor;
  8. }
  9. public String getAppleColor() {
  10. return appleColor;
  11. }
  12. public void setAppleName(String appleName) {
  13. this.appleName = appleName;
  14. }
  15. public String getAppleName() {
  16. return appleName;
  17. }
  18. public void displayName(){
  19. System.out.println("水果的名字是: "+ appleName + " 水果的颜色是:"+ appleColor);
  20. }
  21. }

三、annotation处理方法

实例代码:

[java] view
plain
copy

  1. public class FruitInfoUtil {
  2. public static void getFruitInfo(Object obj){
  3. Class<?

    > clazz = obj.getClass();

  4. Field[] fields = clazz.getDeclaredFields();
  5. for(Field field : fields){
  6. if(field.isAnnotationPresent(FruitName.class)){
  7. FruitName fruitName = (FruitName)field.getAnnotation(FruitName.class);
  8. try {
  9. field.setAccessible(true);
  10. field.set(obj, fruitName.value());
  11. } catch (IllegalArgumentException e) {
  12. e.printStackTrace();
  13. } catch (IllegalAccessException e) {
  14. e.printStackTrace();
  15. }
  16. }else if(field.isAnnotationPresent(FruitColor.class)){
  17. FruitColor fruitColor = (FruitColor)field.getAnnotation(FruitColor.class);
  18. try {
  19. field.setAccessible(true);
  20. field.set(obj, fruitColor.fruitColor().toString());
  21. } catch (IllegalArgumentException e) {
  22. e.printStackTrace();
  23. } catch (IllegalAccessException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. }
  28. }
  29. }

LAST: main方法

[java] view
plain
copy

  1. public class Main {
  2. public static void main(String[] args) {
  3. Apple apple = new Apple();
  4. FruitInfoUtil.getFruitInfo(apple);
  5. apple.displayName();
  6. }
  7. }

执行结果:

水果的名字是: Apple 水果的颜色是:RED

上传下别人总结的annotation的一张图,很直观

版权声明:本文博客原创文章,博客,未经同意,不得转载。

android反射组件 (一个)java 它们的定义annotation基础知识的更多相关文章

  1. JAVA面试题集之基础知识

                           JAVA面试题集之基础知识 基础知识:  1.C 或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就 ...

  2. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

  3. Java中实现异常处理的基础知识

    Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...

  4. 要成为一个 Java 架构师得学习哪些知识?

    作者:zhuqz链接:https://www.zhihu.com/question/29031276/answer/54631312来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  5. java安全学习-环境准备/基础知识

    补java的坑,开始! 1.Intellij一些快捷键 intell常用快捷键: ctrl+n 快速查找定位类的位置 ctrl+q 快速查看某个类的文档信息 shift + F6 快速类.变量重命名 ...

  6. Java IO(1)基础知识——字节与字符

    正所谓怕什么来什么,这是知名的“墨菲定律”.Java基础涵盖各个方面,敢说Java基础扎实的人不是刚毕业的学生,就是工作N年的程序员.工作N年的程序员甚至也不敢人人都说Java基础扎实,甚至精通,往往 ...

  7. Java 面试知识点解析(一)——基础知识篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  8. 【Java面试】1、基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充. 源码分享:https: ...

  9. Java网络编程一:基础知识详解

    网络基础知识 1.OSI分层模型和TCP/IP分层模型的对应关系 这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍. 2.七层模型与协议的对应关系 网络层   ------------ ...

随机推荐

  1. catalina.out 和 catalina.log 的区别和用途

    catalina.out catalina.out其实是tomcat的标准输出(stdout)和标准出错(stderr),这是在tomcat的启动脚本里指定的,如果没有修改的话stdout和stder ...

  2. [React Router v4] Render Multiple Components for the Same Route

    React Router v4 allows us to render Routes as components wherever we like in our components. This ca ...

  3. windows下的定时任务设置详解

    windows下的定时任务设置详解 一.总结 一句话总结: 1.php.exe是什么? 就是php中自带的一个exe,不是我们写的,这个exe是可以执行其他的PHP的 二.windows下的定时任务设 ...

  4. Struts2之配置使用

    重要声明:此次学习struts2使用的版本号为:struts-2.3.15.3.假设是用的其它版本号出现的问题能够联系我. 一. 1.首先就是打开myeclipse创建project名为:struts ...

  5. 数据库迁移框架Flyway介绍

    官方文档 https://flywaydb.org/getstarted/firststeps/api[https://flywaydb.org/getstarted/firststeps/api] ...

  6. iOS解决json串中的NSNull类型

    iOS解决json串中的NSNull类型   后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符 ...

  7. 【9309】求Y=X1/3

    Time Limit: 1 second Memory Limit: 2 MB 问题描述 求Y=X1/3次方的值.X由键盘输入(x不等于0,在整型范围内).利用下列迭代公式计算: yn + 1=2/3 ...

  8. svn创建版本库和删除版本库

    作者:朱金灿 来源:http://blog.csdn.net/clever101 svn创建版本库的做法:使用cd命令进入版本仓库的根目录,我的是E:\Repository,然后运行命令: svnad ...

  9. hadoop 3.x 单机集群配置/启动时的问题处理

    一.修改配置文件(hadoop目录/etc/hadoop/配置文件) 1.修改hadoop-env.sh,指定JAVA_HOME 修改完毕后 2.修改core-site.xml <configu ...

  10. 用Github账号领Ripple币

    最近随着比特币在互联网上的流行,其他各种电子货币也都增加了曝光率. 昨晚在 v2ex 上看到有人发帖,用 20RMB 换取 2013 年 5 月 1 日前使用过的 github 账号得到的一个验证码. ...