使用反射将字段值设置为null

10

我正在将一个变量的值设置为null,但遇到了问题:

public class BestObject {
    private Timestamp deliveryDate;
    public void setDeliveryDate(Timestamp deliveryDate) {
         this.deliveryDate = deliveryDate;
    }
}

BeanUtils.setProperty(new BestObject(), "deliveryDate", null); // usually the values are not hardcoded, they come from configuration etc

这是错误信息:

org.apache.commons.beanutils.ConversionException: No value specified
    at org.apache.commons.beanutils.converters.SqlTimestampConverter.convert(SqlTimestampConverter.java:148)
    at org.apache.commons.beanutils.ConvertUtils.convert(ConvertUtils.java:379)
    at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:999)

基本上是尝试将java.sql.Timestamp值设置为null,但出于某种原因无法工作。

另一方面,我正在使用反射包装器BeanUtils(http://commons.apache.org/proper/commons-beanutils/),也许可以使用普通反射实现此操作?


你的例子无法编译。'myObject' 是从哪里来的?请编辑你的代码,以便我们可以知道发生了什么。(展示'myObject'的实例化) - Rebecca Nelson
@TFNelson 抱歉,我的对象是POJO,在其中deliveryDate是属性。我会尝试进行编辑以使其更好。 - Jaanus
4个回答

16

我使用标准反射成功完成了它。

java.lang.reflect.Field prop = object.getClass().getDeclaredField("deliveryDate");
prop.setAccessible(true);
prop.set(object, null);

2
这可以通过简单的技巧实现。
Method setter;
setter.invoke(obj, (Object)null);

1

非常好的例子,我们可以用它来创建一个通用的方法来设置字段。 - Sham Fiorin

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接