java反射之Field用法(获取对象的字段名和属性值)

本文详细介绍了Java反射中Field类的作用,包括获取和设置字段类型、修饰符、值,以及提供实践示例,如获取字段名、指定字段值的获取和赋值操作。
摘要由CSDN通过智能技术生成

一、概述


Field是一个类,位于java.lang.reflect包下。在Java反射中Field类描述的是类的属性信息,功能包括:

获取当前对象的成员变量的类型
对成员变量重新设值


二、如何获取Field类对象


getField(String name): 获取类特定的方法,name参数指定了属性的名称
Class.getFields(): 获取类中public类型的属性,返回一个包含某些 Field 对象的数组,该数组包含此 Class 对象所表示的类或接口的所有可访问公共字段
getDeclaredField(String name): 获取类特定的方法,name参数指定了属性的名称
getDeclaredFields(): 获取类中所有的属性(public、protected、default、private),但不包括继承的属性,返回 Field 对象的一个数组


三、Field 类对象常用方法


   1.获取变量的类型:

Field.getType():返回这个变量的类型
Field.getGenericType():如果当前属性有签名属性类型就返回,否则就返回 Field.getType()
isEnumConstant() : 判断这个属性是否是枚举类
   2.获取成员变量的修饰符:

Field.getModifiers()  以整数形式返回由此 Field 对象表示的字段的 Java 语言修饰符
   3.获取和修改成员变量的值getName() : 获取属性的名字
get(Object obj) 返回指定对象obj上此 Field 表示的字段的值
set(Object obj, Object value) 将指定对象变量上此 Field 对象表示的字段设置为指定的新值


四、实践代码


    1.获取对象中的所有字段名

//获取所有字段名
Field[] declaredFields = FinancieWaybillPageListVo.class.getDeclaredFields();
List<String> columnList = new ArrayList<>();
for (Field declaredField : declaredFields) {
    String name = declaredFields.getName();
    if ("CustomColumnVo".equals(name)) {
        continue;
    }
    columnList.add(name);
}
userCustomColumn.setColumnName(columnList);

2.获取对象中的指定字段名

 Field field = tProductionInputQualityDatas.getClass().getDeclaredField("indicatorCode");

3.通过反射给属性赋值

//其次设置该属性的可访问性
field.setAccessible(true);
field.set(tProductionInputQualityDatas,"D0012");

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过Java反射获取泛型的属性,需要使用以下步骤: 1. 首先,通过反射获取到泛型类的类对象。可以使用Java的Class类的getDeclaredField方法来获取指定属性。 2. 然后,你需要知道要获取属性的名称。这个属性的名称必须作为参数传递给getDeclaredField方法。 3. 接下来,你需要设置属性的可访问性,因为很多属性都是使用private关键字修饰的,所以需要将setAccessible方法设置为true,以允许访问私有属性。 4. 最后,通过调用Field类的get方法来获取属性。 例如,假设我们要获取一个名为parentid的属性,可以按照以下方式进行操作: ``` Field field = t.getClass().getDeclaredField("parentid"); field.setAccessible(true); Object parentid = field.get(item); ``` 其中,t是泛型类的实例对象,item是该实例对象中的一个具体对象。通过上述代码,我们可以获取到parentid属性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [java反射-泛型-属性获取-属性设置(抽象出一个组装树形结构数据的通用小方法)](https://blog.csdn.net/u010691807/article/details/98628237)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [reflectutils:一组与处理类及其字段相关的反射实用程序和杂项实用程序,没有依赖项,与 java 1.5 和泛型...](https://download.csdn.net/download/weixin_42148975/19571311)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值