注解与反射
来源:互联网 发布:复杂网络 大数据 编辑:程序博客网 时间:2024/04/29 00:56
这段时间学习了注解与反射的用法,想在这里做个总结。
- 注解的定义
@Target(value = ElementType.FIELD) //可以为ElementType.METHOD ....@Retention(value = RetentionPolicy.RUNTIME) //可以为RetentionPolicy.SOURCE ...public @interface NodeId {}
@Target(value= ElementType.FIELD)@Retention(value = RetentionPolicy.RUNTIME )public @interface NodeName {}
@Target(value = ElementType.FIELD)@Retention(value = RetentionPolicy.RUNTIME)public @interface NodePid {}
注解定义中最重要的是@Target 和@Retention 属性,在这里我给这两个属性赋值分别为ElementType.FIELD与RentionPolicy.RUNTIME,两者合起来的意思就是:在程序运行中可获得元素类型为变量(域)的值。 - 注解的使用
public class FileBean { @NodeId //将注解加到运行中要取值的对象上 private int id; @NodePid private int pId; @NodeName private String label;
分别将注解标记加在要在运行中获取值的变量上。
- 在运行中使用注解和反射获取变量值
for (T t : datas) { Class aClass = t.getClass(); //通过泛型t得到Class对象 Field[] fields = aClass.getDeclaredFields(); //通过Class对象来的到所有变量的集合 for (Field field : fields) { //遍历变量看变量的注解是否是对应的 if (field.getAnnotation(NodeId.class) != null) { field.setAccessible(true); //反射,将private类型的属性设置可访问 id = field.getInt(t);//反射,拿到属性值 } if (field.getAnnotation(NodePid.class) != null) { field.setAccessible(true); pId = field.getInt(t); } if (field.getAnnotation(NodeName.class) != null) { field.setAccessible(true); label = (String) field.get(t); } } Node node = new Node(id, pId, label); //通过拿到的值新建对象 nodes.add(node); }
当使用泛型时,比如说上面变量t,当还还没有确定实体的时候,我们是无法直接调用方法直接拿到实体中的属性的,同时命名规范又不是太实用的时候,我们便可以利用到注解与反射来得到我们在运行中需要得到的实体对象,这种方法是非常实用的。
0 0
- 注解与反射
- 反射与注解
- 反射与注解
- 反射与注解
- 注解与反射
- 注解与反射
- java 注解与反射
- java反射与注解
- Java反射与注解
- JAVA反射与注解
- JAVA反射与注解
- 反射与注解
- JAVA反射与注解实例
- JAVA反射与注解实例
- 反射与注解的使用
- Class类,反射与注解
- 反射、注解与依赖注入
- Android注解与反射机制
- MyBatis学习 之 三、动态SQL语句
- selenium 不断切换代理 打淘宝小店流量
- web.xml 详细介绍
- linux内核配置入门
- PS更换证件照背景颜色
- 注解与反射
- 二级指针用法示例
- PHP的mysql密码修改
- 欧拉角与方向余弦矩阵之间的转换
- C#键盘鼠标钩子
- Activity 切换(Android studio)
- AndroidWear 开发环境搭建
- OpensGalaxy
- 这些年