From b3ddbcba23ee83fc03c6c5973beba45ed3c9acbc Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 9 Mar 2023 23:33:09 +0800 Subject: [PATCH] fix code --- .../java/cn/hutool/core/bean/PropDesc.java | 5 ++-- .../cn/hutool/core/lang/func/LambdaUtil.java | 9 +++++- .../core/bean/BeanWithReturnThisTest.java | 30 +++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 hutool-core/src/test/java/cn/hutool/core/bean/BeanWithReturnThisTest.java diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/PropDesc.java b/hutool-core/src/main/java/cn/hutool/core/bean/PropDesc.java index 73d09596b..1b745c1e0 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/PropDesc.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/PropDesc.java @@ -5,7 +5,6 @@ import cn.hutool.core.annotation.PropIgnore; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.func.LambdaUtil; import cn.hutool.core.reflect.FieldUtil; -import cn.hutool.core.reflect.MethodUtil; import cn.hutool.core.reflect.ModifierUtil; import cn.hutool.core.reflect.ReflectUtil; import cn.hutool.core.reflect.TypeUtil; @@ -226,8 +225,8 @@ public class PropDesc { */ public PropDesc setValue(final Object bean, final Object value) { if (null != this.setter) { - MethodUtil.invoke(bean, this.setter, value); - //LambdaUtil.buildSetter(this.setter).accept(bean, value); + //MethodUtil.invoke(bean, this.setter, value); + LambdaUtil.buildSetter(this.setter).accept(bean, value); } else if (ModifierUtil.isPublic(this.field)) { FieldUtil.setFieldValue(bean, this.field, value); } diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java index 19ccd47d2..77d70a246 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java @@ -168,7 +168,14 @@ public class LambdaUtil { */ @SuppressWarnings("unchecked") public static BiConsumer buildSetter(final Method setMethod) { - return LambdaFactory.build(BiConsumer.class, setMethod); + final Class returnType = setMethod.getReturnType(); + if(Void.class == returnType){ + return LambdaFactory.build(BiConsumer.class, setMethod); + } + + // 返回this的setter + final BiFunction biFunction = LambdaFactory.build(BiFunction.class, setMethod); + return biFunction::apply; } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/bean/BeanWithReturnThisTest.java b/hutool-core/src/test/java/cn/hutool/core/bean/BeanWithReturnThisTest.java new file mode 100644 index 000000000..acec2d47c --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/bean/BeanWithReturnThisTest.java @@ -0,0 +1,30 @@ +package cn.hutool.core.bean; + +import org.junit.Assert; +import org.junit.Test; + +public class BeanWithReturnThisTest { + + @Test + public void setValueTest() { + final BeanWithRetuenThis bean = new BeanWithRetuenThis(); + final BeanDesc beanDesc = BeanUtil.getBeanDesc(BeanWithRetuenThis.class); + final PropDesc prop = beanDesc.getProp("a"); + prop.setValue(bean, "123"); + + Assert.assertEquals("123", bean.getA()); + } + + static class BeanWithRetuenThis{ + public String getA() { + return a; + } + + public BeanWithRetuenThis setA(final String a) { + this.a = a; + return this; + } + + private String a; + } +}