它们的定义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. 微擎 plugin 时间插件 图片上传插件不显示 报错 影响下面执行

    可能是版本更新导致的,之前可能不需要 load()->func('tpl');这个方法 现在加上 load()->func('tpl');应该就可以了

  2. 【心情】bjdldrz

    如果我对勇士的记忆停留在73胜10负,

  3. oracle汉字占用字节长度

    1.        今天调查一个oracle数据库问题的时候,发如今11g中一个汉字占2个字节,在10g中占3个字节.导致将11g数据库中的数据导入到10g的时候总是出错.開始的时候还以为是11g和1 ...

  4. css选择器指定元素中第几个子元素

    tr td:nth-child(2){ background-color:gray; } 就是tr当中的td的第二个td的属性 tr:nth-child(2n+0){ background-color ...

  5. 无法为数据库中的对象分配空间,因为'PRIMARY'文件组已满

    用SQL Server2012,做数据保存时出错,错误信息:无法为数据库'***'中的对象'***'分配空间,因为'PRIMARY'文件组已满.请删除不需要的文件.删除文件组中的对象.将其他文件添加到 ...

  6. Quartz.NET 3.0.7 + MySql 实现动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(一)

    原文:Quartz.NET 3.0.7 + MySql 实现动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(一) 前端时间,接到领导任务,写了一个调度框架.今天决定把心路历程记 ...

  7. [Javascript] Javascript 'in' opreator

    If you want to check whether a key is inside an Object or Array, you can use 'in': Object: const obj ...

  8. source insight 添加自定义macro

    打开C:\Documents and Settings\xxxx\My Documents\Source Insight\Projects\Base文件夹下的em文件,可以看到都是由macro定义的一 ...

  9. QT学习记录之环境搭建

    作者:朱金灿 来源:http://blog.csdn.net/clever101 1. 安装qt-win-opensource-4.8.5-vs2008.exe(对应的IDE是VS2008),安装路径 ...

  10. 【u213&&t037】修剪花卉

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] ZZ对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题. 一天他早晨骑车去上 ...