java类中获取属性的名称

转载 2012年03月30日 05:59:39
在类中定义了一个属性abc,如何获取这个变量的abc的名字串呢?也就是说怎么知道abc这个变量的名字是abc,这个问题比较的好玩。

这个是偶以前在一开发中遇到的一个比较有趣的问题,找了半天的资料加下偶辛勤的思考,终于找到的解决方法。用反射~~~

java提供了很强大的反射机制,可以说比动态语言还动态。但是这个东东平时的应用不是很多的说。

现提供一个可以动态获取对象中的变量的变量名称的方法:

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

java如何获取方法参数名

在java中,可以通过反射获取到类、字段、方法签名等相关的信息,像方法名、返回值类型、参数类型、泛型类型参数等,但是不能够获取方法的参数名。在实际开发场景中,有时需要根据方法的参数名做一些操作,比如像...
  • mhmyqn
  • mhmyqn
  • 2015年08月05日 11:33
  • 21448

Field获取java类中的成员变量名

利用反射机制获取成员变量的变量名 PartnerDto partnerDto; Map partnerCustomerMap = partnerDto.getCustomData(); ...
  • mccand1234
  • mccand1234
  • 2017年07月11日 22:17
  • 1441

获取安卓系统设置,变量名都在这里了

Settings.System extends Settings.NameValueTable java.lang.Object    ↳ androi...
  • jushenziao
  • jushenziao
  • 2016年04月27日 09:28
  • 405

通过变量名获取变量值

public static Object getAllComponentsName(Object f, String name) {         Object obj = null;     ...
  • u014731752
  • u014731752
  • 2016年04月20日 11:31
  • 584

java获取对象属性类型、属性名称、属性值

因为项目需要用到,于是简单封装了一些常用的操作: /** * 根据属性名获取属性值 * */ private Object getFieldValueByName(String f...
  • linshutao
  • linshutao
  • 2012年06月26日 17:04
  • 84611

利用反射获取Java类中的静态变量名及变量值

利用反射获取Java类中的静态变量名及变量值. JAVA可以通过反射获取成员变量和静态变量的名称,局部变量就不太可能拿到了...
  • qq369201191
  • qq369201191
  • 2015年11月01日 20:12
  • 12567

如何获得局部变量名

  • 2013年03月26日 15:46
  • 7KB
  • 下载

java中如何获得某一变量的类型

如果是对象,那么可以使用getClass().getName()方法获得该对象的类名, 然,还有就是利用反射机制获取原数据类型的,这个时候如果需要确定类型,     同样的,反射机制返回值是对象,...
  • HackProgramer
  • HackProgramer
  • 2014年07月03日 09:23
  • 2136

java获取对象属性类型、属性名称、属性值

应用场景:例如:有这样的需求,前端传来一串json字符串,需要转成实体类,如果利用struts可识别的参数格式可直接映射为对应的实体类。但是有些格式(如info="user.userId=3289e8...
  • superit401
  • superit401
  • 2017年06月26日 10:39
  • 2584

java反射得到类对象,并且得到类的属性

问题引入?比如在一个jsp表单页面有几百个填报选项,提交传入后台,肯定后台不是一个一个的request.getParameter()的方法,我们可以采用以类的形式提交,关于这个实现在另外一篇文章有介绍...
  • pangliang_csdn
  • pangliang_csdn
  • 2016年09月09日 13:59
  • 1091
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java类中获取属性的名称
举报原因:
原因补充:

(最多只允许输入30个字)