java反射给属性赋值_java反射对某个包装属性赋值为null的做法

我有个需求需要在操作bean时要先去除所有的默认值。

那我通过反射来获取每个字段的set方法,然后再反射给null代码如下:public static void removeAllDefaultValue(Object o) throws Exception{

Class clazz = o.getClass();

Field [] fs =  clazz.getDeclaredFields();

Method[] m = clazz.getMethods();

BeanInfo beanInfo = Introspector.getBeanInfo(o.getClass());

PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();

for(Field f : fs){

Class typec =  f.getType();

String typename  = typec.getName();

switch(typename){

case "java.lang.Long":

case "java.lang.Integer":

case "java.lang.Byte":

case "java.lang.Float":

case "java.lang.Double":

case "java.lang.Boolean":

case "java.lang.String":

case "java.util.Date":

for(PropertyDescriptor p : pds){

String name =p.getName();

if(f.getName().toUpperCase().equals(name.toUpperCase())){

Method m1 = p.getWriteMethod();

m1.invoke(o, null);

break;

}

}

}

}

}

但是实际运行效果就是:Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at com.test.ReflectUtil.removeAllDefaultValue(ReflectUtil.java:44)

at com.test.ReflectUtil.main(ReflectUtil.java:112)

经过查询资料和分析后发现,并不能直接给null,否则会认为没有给值。

那这就难办了呀。

所以只能这么做了:if(f.getName().toUpperCase().equals(name.toUpperCase())){

Method m1 = p.getWriteMethod();

Object defaultValue = null;

m1.invoke(o, defaultValue);

break;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值