反射动态根据字段类型转换并赋值

    public static void main(String[] args) throws Exception {

        String s = "0";
        Ref ref = new Ref();
        Field[] fields = ref.getClass().getDeclaredFields();
        for (Field field : fields) {
            int modifiers = field.getModifiers();
            if (Modifier.isFinal(modifiers))
                continue;//final不做处理

            if (field.getType().getName().contains("enum"))
                field.set(ref, Senums.valueOf(s));//其他字段类型另作处理
            
            field.setAccessible(true);//打破封装
            Object o = getObjectField(field, s);
            field.set(ref,o);
        }
        System.out.println(ref);
    }

    @SuppressWarnings("unchecked")
    public static Object getObjectField(Field field,String valueStr) throws Exception {
        Class typeClass = field.getType();
        Constructor con = typeClass.getConstructor(valueStr.getClass());//获取有参构造函数
        Object obj = con.newInstance(valueStr);//构造函数做初始化
        return obj;
    }

 String,Long,Interger都成功赋值,如果对象里有其他类型字段要另作处理,如enum类型

 typeClass.getConstructor(String.class) 此处获取的有参构造方法,在Boolean,Long,Interger源码中对应

 

 

 

如果你想要使用BeanUtils进行不同字段名之间的赋值,可以使用`copyProperties`方法,并在代码中提供一个自定义的`Converter`。 以下是一个示例,展示了如何使用BeanUtils将字段不同对象进行赋值: ```java import org.springframework.beans.BeanUtils; import org.springframework.beans.SimpleTypeConverter; import org.springframework.beans.TypeConverter; public class ObjectConverter { public static void convert(Object source, Object target) { TypeConverter typeConverter = new SimpleTypeConverter(); BeanUtils.copyProperties(source, target, (src, tgt, srcProp, tgtProp) -> { Object convertedValue = typeConverter.convertIfNecessary(srcProp, tgtProp.getType()); tgtProp.getWriteMethod().invoke(tgt, convertedValue); return null; }); } } ``` 在调用时,你可以传入源对象和目标对象进行赋值: ```java SourceObject sourceObject = new SourceObject(); // 设置源对象属性值 TargetObject targetObject = new TargetObject(); ObjectConverter.convert(sourceObject, targetObject); ``` 在这个示例中,我们使用了`SimpleTypeConverter`来进行类型转换。`copyProperties`方法的第三个参数是一个`Converter`,它被用来自定义字段之间的转换规则。在这个自定义的`Converter`中,我们首先使用`TypeConverter`来将源对象属性转换成目标对象属性对应的类型,然后通过反射调用目标对象的setter方法来进行赋值。 请确保源对象和目标对象具有相同类型或者相同字段类型,以便能够正确进行属性值的转换赋值
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值