它们的定义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. C# 二分法查找和排序

    using System;using System.Collections.Generic;using System.Text; namespace AAA{    public class Dich ...

  2. [Now] Configure secrets and environment variables with Zeit’s Now

    Often your project will require some secret keys or tokens - for instance, API keys or database auth ...

  3. iframe父页面与子页面的交互

    iframe子页面调用父页面的变量.js方法.元素(非跨域): window.parent.varName; //获取父页面js全局变量 window.parent.fnName; //获取父页面js ...

  4. 【30.23%】【codeforces 552C】Vanya and Scales

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. [Angular] Scrolling the Message List To the Bottom Automatically Using OnChanges

    Let's say the message list can Input (messages) from parent component, and what we want to do is whe ...

  6. 详解PHP设置定时任务的实现方法

    详解PHP设置定时任务的实现方法 一.总结 一句话总结: 1.ignore_user_abort(true)是什么意思? 无论客户端是否关闭浏览器,下面的代码都将得到执行 2.set_time_lim ...

  7. 一个好汉一个帮:前端UI改造

    今天是周六,继续工作中. 只是,不是自己亲自参与搞代码,让一起好的同事帮我美化界面. 虽说前端,我也可以搞定, but,but呀,所有的工作都让我来搞,实在是太累太烦了. 前端,样式,目前做很多是模仿 ...

  8. 【t083】买票

    [题目链接]:http://noi.qz5z.com/viewtask.asp?id=t083 [题解] 可以看一下: 钱数很小; 最大才10000; 即使每张票都是1元; 最多也只能买10000张票 ...

  9. [Flow] Declare types for application

    In Flow, you can make global declarion about types. Run: flow init It will generate .flowconfig file ...

  10. js进阶 10-3 jquery中为什么用document.ready方法

    js进阶 10-3  jquery中为什么用document.ready方法 一.总结 一句话总结: 1.document.ready和window.onload的区别:用哪个好? document. ...