自定义Annotation

1.声明一个annotation,类型是@interface

//声明注解

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documentedpublic @interfaceValueBind {enumfieIdType {

STRING, INT

};

fieIdType type()default fieIdType.STRING;//为属性提供一个默认值

String value()default "sandy";

}

@Target 表示注解用在什么位置,我这里用在属性上面,可用ElementType枚举类型主要有:

TYPE : 类、接口或enum声明

FIELD: 域(属性)声明

METHOD: 方法声明

PARAMETER: 参数声明

CONSTRUCTOR: 构造方法声明

LOCAL_VARIABLE:局部变量声明

ANNOTATION_TYPE:注释类型声明

PACKAGE: 包声明

@Retention 表示需要在什么级别保存该注解信息。可用RetentionPolicy枚举类型主要有:

SOURCE: 注解将被编译器丢弃(编译的时候删除掉)。

CLASS  :  注解在class文件中可用。但会被VM丢弃。

RUNTIME: VM将在运行时也保存注解(一般都是用这个,运行时通过反射读取注解)

@Documented:  将此注解包含在Javadoc中

2.新建一个需要使用Annotation的类

importtest.annotation.ValueBind.fieIdType;public classStudent {/**因为我为String类型在annotation文件中已经添加了默认值,所以这里可以不用值 **/@ValueBindpublicString name;/**因为这的默认值是String类型,而这用了int类型 ,所以我这里重新设了值 **/@ValueBind(type= fieIdType.INT, value = "15")public intage;publicString toString() {return String.format("Student[name=%s,age=%d]", name, age);

}

}

3.通过反射机制,得到Annotation的值

public static void main(String[] args) throwsException {//通过反射得到类

Object obj = Class.forName("test.annotation.Student").newInstance();//得到类的属性列表

Field[] fields =obj.getClass().getDeclaredFields();for (int i = 0; i < fields.length; i++) {//这个是检查类中属性是否含有注解

if (fields[i].isAnnotationPresent(ValueBind.class)) {//获取注解

ValueBind annotation = fields[i].getAnnotation(ValueBind.class);

String type=annotation.type().toString();if (type.equals("INT")) {

fields[i].setInt(obj, Integer.parseInt(annotation.value()));

}else if (type.equals("STRING")) {

fields[i].set(obj, annotation.value());

}

}

}

System.out.println(((Student) obj).toString());

}

文笔不好,看不看得懂,随意

参考:

java annotation 属性_java annotation 获取属性相关推荐

  1. Java 扫描枚举类并获取属性

    Java 扫描枚举类并获取属性 文章目录 Java 扫描枚举类并获取属性 第一步:在 pom.xml 下导入 hutool 和 commons-lang3 第二步:写一个接口以规范枚举的属性 第三步: ...

  2. java annotation应用_java Annotation的应用

    一.Annotation 示例 Override Annotation 1 @Override2 public void onCreate(Bundle savedInstanceState); 二. ...

  3. java反射可以获得什么属性_java反射获得属性的值

    java反射api_IT/计算机_专业资料.java反射教程,深刻理解java反射,反射 聯絡郵箱:zhiyong.tong@ 反射 API 反射 API 表現,或者反射類,接口,和對象在現..... ...

  4. java正则表达式 中括号_Java正则表达式获取中括号之间的内容

    不包含中括号 正则表达式如下: \\[(.*?)] 注: .匹配除换行符\n之外的任何单字符: *匹配前面的子表达式零次或多次: ?匹配前面的子表达式零次或一次: ()标记一个子表达式的开始和结束位置 ...

  5. java annotation应用_Java Annotation高级应用

    前言: 在此行文<java annotation高级应用>,具体实例化解释annotation和annotation processing tool(APT)的使用.望能对各位的有所帮助. ...

  6. java annotation入门_JAVA - Annotation 注解 入门

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  7. java线程属性_Java 并发 线程属性

    Java 并发 线程属性 @author ixenos 线程优先级 1.每当线程调度器有机会选择新线程时,首先选择具有较高优先级的线程 2.默认情况下,一个线程继承它的父线程的优先级 当在一个运行的线 ...

  8. java 反射,根据类获取 属性名字和值

    /*** @Author MWZHYF* @Description // 产生对象字段* @Date 15:33 2019/4/25* @Param [obj]* @return java.lang. ...

  9. java html对象属性_java中对象属性可以是另外一个对象或对象的参考

    7.对象的属性可以是另外一个对象或对象的参考 通过这种方法可以迅速构建一个比较大的系统. class Motor { Light[] lights; Handle left, right; KickS ...

最新文章

  1. Science Advances文章揭示长时记忆的神经动态表征机制
  2. golang中的WaitGroup
  3. higher likelyhood that where your key is
  4. linux中特殊字符的含义,Linux中的特殊符号以及特殊语法
  5. SQLite性能提升10倍的Web数据库
  6. 【Quartz】解密properties配置文件中的账号密码
  7. 大学生html作业总结,总结 HTML标签作业
  8. 计算 变异系数 标准差 标准偏差 相关系数 平滑指数 回归系数等C++ 模板类
  9. IBM X3650M3存储raid阵列瘫痪的恢复过程
  10. w ndows7怎样连接无线网,windows7电脑如何连接wifi
  11. 五款开源图像处理软件
  12. 禁止win7系统flash插件自动更新教程【系统天地】
  13. CF Round 542 Div1.
  14. Oracle 查询:一小时内、一天内、一周内等
  15. Android dumpsys常用命令
  16. Rockwell 罗克韦尔AB Logix 5000控制器 结构化文本语言(ST) 梯形图(LD)顺序功能图(SFC)功能块图(FBD) IEC 61131-3 手册
  17. 长按键盘,输出多个字,怎么解决?
  18. 几种经济学上的成本概念
  19. 旋转接头出现故障的原因分享
  20. python3安装mysql模块_python3操作MySQL的模块pymysql

热门文章

  1. 【C语言航路】第一站:初识C语言(二)
  2. 军用信息产品项目管理经验-立哥总结
  3. vue 项目统计网站pv uv
  4. Eclipse历史版本下载
  5. 关于破解WIFI密码的最简单方法
  6. python tkinter messagebox_python tkinter messagebox详解
  7. CRMEB单商户小程序商城v4.0系统消息队列启动
  8. 【算法】机器人走迷宫破壁解法(适用于走迷宫、最短路径算法)-20200412
  9. 项目中的第三方支付接口
  10. 3970: 别动我,wa到你怀疑人生