java 反射应用

简介:

Java 中反射的应用:

 

1,获取指定类的所有成员变量,包括父类的成员变量:

Java代码   收藏代码
  1. /*** 
  2.      * get all field ,including fields in father/super class 
  3.      *  
  4.      * @param clazz 
  5.      * @return 
  6.      */  
  7.     public static List<Field> getAllFields(Class clazz) {  
  8.         List<Field> fieldsList = new ArrayList<Field>();// return object  
  9.         if (clazz == null) {  
  10.             return null;  
  11.         }  
  12.   
  13.         Class superClass = clazz.getSuperclass();// father class  
  14.         if (superClass.getName().equals(Object.class.getName()))/* 
  15.                                                                  * java.lang.Object 
  16.                                                                  */{  
  17.             // System.out.println("no father");  
  18.         } else {  
  19.             // System.out.println("has father");  
  20.             fieldsList.addAll(getAllFields(superClass));// Recursive  
  21.         }  
  22.   
  23.         Field[] fields = clazz.getDeclaredFields();  
  24.         for (int i = 0; i < fields.length; i++) {  
  25.             Field field = fields[i];  
  26.             fieldsList.add(field);  
  27.         }  
  28.   
  29.         return fieldsList;  
  30.     }  

 2,设置指定属性(私有成员变量)的值

Java代码   收藏代码
  1. /*** 
  2.      *  
  3.      * @param obj 
  4.      * @param propertyName 
  5.      *            : property name 
  6.      * @param propertyValue 
  7.      *            : value of property 
  8.      * @throws SecurityException 
  9.      * @throws NoSuchFieldException 
  10.      * @throws IllegalArgumentException 
  11.      * @throws IllegalAccessException 
  12.      */  
  13.     public static void setObjectValue(Object obj, String propertyName,  
  14.             String propertyValue) throws SecurityException,  
  15.             NoSuchFieldException, IllegalArgumentException,  
  16.             IllegalAccessException {  
  17.         if (StringUtils.isEmpty(propertyName)  
  18.                 || StringUtils.isEmpty(propertyValue)) {  
  19.             return;  
  20.         }  
  21.         Class<?> clazz = obj.getClass();  
  22.         Field name = clazz.getDeclaredField(propertyName);  
  23.         name.setAccessible(true);  
  24.         name.set(obj, propertyValue);  
  25.   
  26.     }  

 

 

3,获取指定属性(私有成员变量)的值

Java代码   收藏代码
  1. /*** 
  2.      *  
  3.      * @param obj 
  4.      * @param propertyName  :name of property  
  5.      * @return 
  6.      * @throws SecurityException 
  7.      * @throws NoSuchFieldException 
  8.      * @throws IllegalArgumentException 
  9.      * @throws IllegalAccessException 
  10.      */  
  11.     public static Object getObjectValue(Object obj, String propertyName)  
  12.             throws SecurityException, NoSuchFieldException,  
  13.             IllegalArgumentException, IllegalAccessException {  
  14.         if (StringUtils.isEmpty(propertyName)) {  
  15.             return null;  
  16.         }  
  17.         Class<?> clazz = obj.getClass();  
  18.         Field name = clazz.getDeclaredField(propertyName);  
  19.         name.setAccessible(true);  
  20.         return name.get(obj);  
  21.     }  

 说明:依赖的jar:commons-lang-2.6.jar

相关文章
|
14天前
|
安全 Java 索引
Java——反射&枚举
本文介绍了Java反射机制及其应用,包括获取Class对象、构造方法、成员变量和成员方法。反射允许在运行时动态操作类和对象,例如创建对象、调用方法和访问字段。文章详细解释了不同方法的使用方式及其注意事项,并展示了如何通过反射获取类的各种信息。此外,还介绍了枚举类型的特点和使用方法,包括枚举的构造方法及其在反射中的特殊处理。
37 9
Java——反射&枚举
|
21天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
6天前
|
Java 测试技术
Java接口的生产环境应用注意点
在Java生产环境中,合理使用接口对提升代码质量至关重要。设计接口时应遵循单一职责原则,采用清晰命名,并控制方法数量。默认方法应谨慎使用,避免与实现类产生冲突。通过版本化管理接口更新,确保向后兼容。实现接口时需明确行为,保持实现与接口分离,利用多态增强灵活性。关注性能影响,适当文档注释及充分测试确保接口稳定可靠。综合运用这些策略,可以显著提高系统的可扩展性和维护性。
|
9天前
|
JavaScript 前端开发 Java
Java 8 新特性详解及应用示例
Java 8 新特性详解及应用示例
|
12天前
|
缓存 负载均衡 Dubbo
Dubbo技术深度解析及其在Java中的实战应用
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
39 6
|
9天前
|
Java API
Java中的Lambda表达式及其应用
本文将深入探讨Java中的Lambda表达式,通过简洁易懂的语言和示例代码,帮助读者理解Lambda表达式的定义、优势以及在实际开发中的应用。同时,我们将解析一些常见的使用场景,并展示如何利用Lambda表达式简化代码,提高编程效率。
18 2
|
16天前
|
Kubernetes Java Maven
揭秘无服务器革命:Quarkus如何让Java应用在云端“零”负担起飞?
本文介绍如何使用Quarkus从零开始开发无服务器应用,通过示例代码和详细步骤引导读者掌握这一技术。无服务器架构让开发者无需管理服务器,具有自动扩展和成本效益等优势。Quarkus作为Kubernetes Native Java框架,优化了Java应用的启动速度和内存使用,适合无服务器环境。文章涵盖环境搭建、项目创建及部署全流程,并介绍了Quarkus的扩展性和监控工具,助力高效开发与应用性能提升。
24 9
|
12天前
|
Java 开发者
Java中的多线程基础与应用
【9月更文挑战第22天】在Java的世界中,多线程是一块基石,它支撑着现代并发编程的大厦。本文将深入浅出地介绍Java中多线程的基本概念、创建方法以及常见的应用场景,帮助读者理解并掌握这一核心技术。
|
22天前
|
SQL JavaScript 前端开发
用Java来开发Hive应用
用Java来开发Hive应用
25 7
|
22天前
|
SQL JavaScript 前端开发
用Java、Python来开发Hive应用
用Java、Python来开发Hive应用
22 6
下一篇
无影云桌面