
反射操作注解简单案例
发布日期:2021-05-14 16:20:29
浏览次数:20
分类:精选文章
本文共 3071 字,大约阅读时间需要 10 分钟。
反射操作注解 - Java示例解析
本文将通过Java反射与注解的结合,展示如何通过代码获取注解信息,并自由操控类和字段。
获取类注解
在Java反射中,获取一个类的注解可以通过Class.getAnnotations()
方法实现。例如:
Class c1 = Class.forName("Reflection.Student2");Annotation[] annotations = c1.getAnnotations();for (Annotation annotation : annotations) { System.out.println(annotation);}
上述代码片段将输出类所携带的所有注解信息。
获取注解值
注解中的方法通常返回的是抽象属性,可以通过反射方式赋值并获取值。例如:
SSS s = (SSS) c1.getAnnotation(SSS.class);String value = s.value();System.out.println(value);
此处,SSS
是一个自定义注解,value()
是其唯一的抽象属性。
获取字段注解
反射还可以通过字段来获取其注解信息。例如:
Field id = c1.getDeclaredField("id");Fields an = id.getAnnotation(Fields.class);if (an != null) { System.out.println(an.columnName()); System.out.println(an.type()); System.out.println(an.length());}
Fields
是一个用于字段注解的注解类,其属性包括columnName()
、type()
和length()
。
核心代码展示
以下是完整的代码示例:
package Reflection;import java.lang.annotation.Annotation;import java.lang.reflect.Field;public class Test11 { public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException { // 获取类注解 Class c1 = Class.forName("Reflection.Student2"); Annotation[] annotations = c1.getAnnotations(); for (Annotation annotation : annotations) { System.out.println(annotation); } // 获取注解值 SSS s = (SSS) c1.getAnnotation(SSS.class); String value = s.value(); System.out.println(value); // 获取字段注解 Field id = c1.getDeclaredField("id"); Fields an = id.getAnnotation(Fields.class); if (an != null) { System.out.println("字段注解信息:"); System.out.println("列名:" + an.columnName()); System.out.println("类型:" + an.type()); System.out.println("长度:" + an.length()); } }}@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@interface SSS { String value();}@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@interface Fields { String columnName(); String type(); int length();}// 类名为Student2的详细内容class Student2 { @Fields(columnName = "db_id", type = "int", length = 10) private int id; @Fields(columnName = "db_name", type = "varchar", length = 3) private String name; @Fields(columnName = "db_age", type = "int", length = 10) private int age; public Student2() {} public Student2(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; }}
总结
反射操作允许我们在运行时获取和修改类和对象的各种属性,注解则为代码提供了丰富的元数据。通过反射和注解的结合,可以实现更灵活的代码配置和扩展功能。在实际开发中,可以结合反射和注解技术,根据需要定制注解处理逻辑,提升代码的灵活性和可维护性。如需进一步探索,可以参考Java官方文档,深入理解反射与注解的使用细节。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月27日 05时27分47秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
我用wxPython搭建GUI量化系统之最小架构的运行
2019-03-07
我用wxPython搭建GUI量化系统之多只股票走势对比界面
2019-03-07
selenium+python之切换窗口
2019-03-07
重载和重写的区别:
2019-03-07
搭建Vue项目步骤
2019-03-07
账号转账演示事务
2019-03-07
idea创建工程时错误提醒的是architectCatalog=internal
2019-03-07
SpringBoot找不到@EnableRety注解
2019-03-07
简易计算器案例
2019-03-07
在Vue中使用样式——使用内联样式
2019-03-07
Explore Optimization
2019-03-07
Kali Linux 内网渗透教程 - ARP欺骗攻击 | 超详细
2019-03-07
2020Java程序设计基础(华东交通大学)章节测试免费满分答案
2019-03-07
解决数据库报ORA-02289:序列不存在错误
2019-03-07
map[]和map.at()取值之间的区别
2019-03-08
成功解决升级virtualenv报错问题
2019-03-08
【SQLI-Lab】靶场搭建
2019-03-08
【Bootstrap5】精细学习记录
2019-03-08