Field 反射机制 对象属性值重写

body:{
    String A:"123";
    String B:"123";
    Asset asset:{//此时Asset 有一个父类AssetParent
        String M:"123";
        String N:"123";
        ------- 以下父类属性--------
        String X:"123";
        Stirng Y:"123"
    }

   List<Asset> list:{
        asset:{//此时Asset 有一个父类AssetParent
        String M:"123";
        String N:"123";
        ------- 以下父类属性--------
        String X:"123";
        Stirng Y:"123"
    }      
     }
}
AssetParent assetParent:{
    String X:"123";
    Stirng Y:"123"
}


public void onField(Object body){
        Class<?> objTarget = body.getClass().getSuperclass();

        1.getType() :获取字段的Type类型
        2.getName()//获取字段名
        3.getDeclaringClass() :会返回最初声明该字段的父类class:
假设有一个类A,它定义了一个内部类B,那么在类B中调用getClass().getDeclaringClass(),将会返回A类的Class对象。而在类A中怎么获得内部类B的父类属性getSuperclass()方法获取内部类B的父类属性。由于内部类B是继承自类A的,因此返回的父类属性是A
        4.getGenericType() : 返回属性声明的Type类型;如属性是泛型,返回泛型的参数类型,无签名属性返回 Field.getType()

        Field field = objTarget.getDeclaredField("asset");//获取body下asset对象

        5.field.setAccessible(true);//对象属性为私有,属性变更为public
        6.field.get(body);//获取asset数据 
        7.field.getType()//获取到当前类asset属性
        8.field.getDeclaringClass()//获取到当前类asset属性以及父类属性AssetParent

       

        Field objTarget = field.getType().getDeclaredField("M");//获取属性M
        Field objTarget = field.getDeclaringClass().getDeclaredField("X");//获取属性X

        9.objTarget.set(body,"123");//给获取的属性赋新值

        //对list结构序列化操作   

Field dataField = body.getClass().getSuperclass().getDeclaredField("data");
dataField.setAccessible(true);
list = (List<Class<?>>) dataField.get(body);
if(!ObjectUtils.isEmpty(list)){
    for(int i=0;i<list.size();i++){
        log.info("************obj******:{}",JSONObject.toJSONString(list.get(i)));
        Object o = list.get(i);
        Class<?> objTarget = o.getClass().getSuperclass();
        for (String fieldName:dtoFidle) {
            Field fieldObj = objTarget.getDeclaredField(fieldName);
            fieldObj.setAccessible(true);
            if(!ObjectUtils.isEmpty(fieldObj.get(list.get(i)))){
                fieldObj.set(o, "value");
            }
        }
    }
}

//不确定子类属性还是父类属性

Class<?> o = obj.getClass().getSuperclass();
Field element = null;
try{
    element = o.getDeclaredField(key);
    element.setAccessible(true);
}catch (Exception e) {
    o = obj.getClass();
    element = o.getDeclaredField(key);
    element.setAccessible(true);
}
log.info("key**********:{},************value:{}",key,element.get(obj));
if(!ObjectUtils.isEmpty(element.get(obj))){
    element.set(obj, "");
}

//取数据一级一级取然后填充

Object o = field.get(body);
Field creditPromiseDetailDto = o.getClass().getDeclaredField("custCompanyDto");
creditPromiseDetailDto.setAccessible(true);
exeChange(custCompanyDto,o,body);//element.set(obj, encrpy); 填充
//-----------
Object o_next = creditPromiseDetailDto.get(o);
Field authUser = o_next.getClass().getDeclaredField("authUser");
authUser.setAccessible(true);
//authUser  element.set(obj, encrpy); 填充
Field legalPerson = o_next.getClass().getDeclaredField("legalPerson");
legalPerson.setAccessible(true);
//legalPerson  element.set(obj, encrpy); 填充
  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值