用java类中的映射获取变量名:java反射机制 淩亂°似流年 2022-07-21 02:42 176阅读 0赞 (转载) [用java类中的映射获取变量名][java] 在类中定义了一个属性abc,如何获取这个变量的abc的名字串呢?也就是说怎么知道abc这个变量的名字是abc,这个问题比较的好玩。 这个是偶在一开发中遇到的一个比较有趣的问题,找 了半天的资料加下偶辛勤的思考,终于找到的解决方法。用反射~~~ java提供了很强大的反射机制,可以说比动态语言还动态。但是这个东东平时的应用不是很多的说。 现提供一个可以动态获取对象中的变量的变量名称的[bt][]方法: public class MyTools \{ public static void setAllComponentsName(Object f) \{ // 获取f对象对应类中的所有属性域 Field\[\] fields = f.getClass().getDeclaredFields(); for(int i = 0 , len = fields.length; i < len; i++) \{ // 对于每个属性,获取属性名 String varName = fields\[i\].getName(); try \{ // 获取原来的访问控制权限 boolean accessFlag = fields\[i\].isAccessible(); // 修改访问控制权限 **fields\[i\].setAccessible(true);** // 获取在对象f中属性fields\[i\]对应的对象中的变量 **Object o = fields\[i\].get(f);** System.out.println("传入的对象中包含一个如下的变量:" + varName + " = " + o); // 恢复访问控制权限 fields\[i\].setAccessible(accessFlag); \} catch (IllegalArgumentException ex) \{ ex.printStackTrace(); \} catch (IllegalAccessException ex) \{ ex.printStackTrace(); \} \} \} public static void main(String\[\] args) \{ // 测试代码用来获取一个JLabel中声名的所有的属性名和其属性变量 setAllComponentsName(new JLabel("测试")); \} \} **fields\[i\].setAccessible(true);**这句主要是因为私有的变量在对象外是无法访问的,通过这个设置就可以改变私有变量的访问权,还真的有点恐怖,当偶把这个解决方法告诉Boss的时候,Boss差点吐血,私有的都能访问了,还有什么安全可言? 不过了,有安全就有特权,所以由于能很好的解决问题还是被采纳了,嘻嘻~~~ **Object o = fields\[i\].get(f);**这句的作用就是取得传入对象f中类的属性fields\[i\]对应的真实的属性变量,说的有点别扭,比如有一个类A中有一个int abc的属性,并且我们有两个A类的对象a1,a2,那么当我们用**fields\[i\].get(a1)**的时候得到的将是对象a1中的具体的abc属性,而我们用**fields\[i\].get(a2)**的时候得到的将是对象a2中的具体的abc属性。 最后是用一个main方法测试了一个JLabel对象,打印出了JLabel中声名的所有的变量名,并输出了其对应的变量的值。结果如下: 传入的对象中包含一个如下的变量:uiClassID = LabelUI 传入的对象中包含一个如下的变量:mnemonic = 0 传入的对象中包含一个如下的变量:mnemonicIndex = -1 传入的对象中包含一个如下的变量:text = 测试 传入的对象中包含一个如下的变量:defaultIcon = null 传入的对象中包含一个如下的变量:disabledIcon = null 传入的对象中包含一个如下的变量:disabledIconSet = false 传入的对象中包含一个如下的变量:verticalAlignment = 0 传入的对象中包含一个如下的变量:horizontalAlignment = 10 传入的对象中包含一个如下的变量:verticalTextPosition = 0 传入的对象中包含一个如下的变量:horizontalTextPosition = 11 传入的对象中包含一个如下的变量:iconTextGap = 4 传入的对象中包含一个如下的变量:labelFor = null 传入的对象中包含一个如下的变量:LABELED\_BY\_PROPERTY = labeledBy 收藏于 2010-06-03 [java]: http://www.blogjava.net/zhongli/archive/2009/02/13/254535.html [bt]: http://www.bt285.cn/
相关 Java反射机制:如何通过类名获取对象实例? 在Java中,反射机制允许我们在运行时检查类、字段和方法等信息,并动态创建和操作这些对象。 以下是如何通过类名获取对象实例的步骤: 1. **加载Class**: 首 柔情只为你懂/ 2024年09月13日 14:06/ 0 赞/ 15 阅读
相关 Java反射机制:如何获取类的信息 在Java中,反射机制允许我们在运行时检查和修改对象的属性或行为。以下是如何获取类的信息的步骤: 1. **创建Class对象**: 首先需要一个类的对象,可以通过类名 布满荆棘的人生/ 2024年09月12日 09:00/ 0 赞/ 21 阅读
相关 Java反射机制:类名获取与动态调用案例 Java反射机制是一种在运行时检查类、接口及对象的方法。以下通过两个具体案例来展示类名获取和动态调用的使用。 1. 类名获取 ```java // 使用Class类获取类名 Dear 丶/ 2024年09月10日 16:36/ 0 赞/ 22 阅读
相关 用java类中的映射获取变量名:java反射机制 (转载) [用java类中的映射获取变量名][java] 在类中定义了一个属性abc,如何获取这个变量的abc的名字串呢?也就是说怎么知道abc这个变量的名字是abc,这个 淩亂°似流年/ 2022年07月21日 02:42/ 0 赞/ 177 阅读
相关 java 反射机制--根据属性名获取属性值 最近在工作中遇到属性名不确定的问题,考虑用到了Java的反射机制,根据查询的属性名反射该属性的值,亲测很好用! 介绍三种方式,我使用的场景比较简单,就选择了第一种方式 1. 今天药忘吃喽~/ 2022年05月25日 08:40/ 0 赞/ 263 阅读
相关 通过Java反射机制修改Java类中final类型变量的值 先上实例代码: package JavaDay5_29; import org.junit.jupiter.api.Test; i 心已赠人/ 2022年05月22日 23:59/ 0 赞/ 586 阅读
相关 java 反射机制--根据属性名获取属性值 1.考虑安全访问范围内的属性,没有权限访问到的属性不读取 / 根据属性名获取属性值 @param fieldName @pa 痛定思痛。/ 2022年04月15日 01:46/ 0 赞/ 490 阅读
相关 java反射机制根据属性名获取属性值 考虑安全访问范围内的属性,没有权限访问到的属性不读取 /** * 根据属性名获取属性值 * * @par... 朱雀/ 2020年10月18日 12:14/ 0 赞/ 964 阅读
还没有评论,来说两句吧...