This commit is contained in:
Looly 2023-03-09 23:33:09 +08:00
parent b17cd4abb1
commit b3ddbcba23
3 changed files with 40 additions and 4 deletions

View File

@ -5,7 +5,6 @@ import cn.hutool.core.annotation.PropIgnore;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.func.LambdaUtil; import cn.hutool.core.lang.func.LambdaUtil;
import cn.hutool.core.reflect.FieldUtil; import cn.hutool.core.reflect.FieldUtil;
import cn.hutool.core.reflect.MethodUtil;
import cn.hutool.core.reflect.ModifierUtil; import cn.hutool.core.reflect.ModifierUtil;
import cn.hutool.core.reflect.ReflectUtil; import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.reflect.TypeUtil; import cn.hutool.core.reflect.TypeUtil;
@ -226,8 +225,8 @@ public class PropDesc {
*/ */
public PropDesc setValue(final Object bean, final Object value) { public PropDesc setValue(final Object bean, final Object value) {
if (null != this.setter) { if (null != this.setter) {
MethodUtil.invoke(bean, this.setter, value); //MethodUtil.invoke(bean, this.setter, value);
//LambdaUtil.buildSetter(this.setter).accept(bean, value); LambdaUtil.buildSetter(this.setter).accept(bean, value);
} else if (ModifierUtil.isPublic(this.field)) { } else if (ModifierUtil.isPublic(this.field)) {
FieldUtil.setFieldValue(bean, this.field, value); FieldUtil.setFieldValue(bean, this.field, value);
} }

View File

@ -168,9 +168,16 @@ public class LambdaUtil {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static <T, P> BiConsumer<T, P> buildSetter(final Method setMethod) { public static <T, P> BiConsumer<T, P> buildSetter(final Method setMethod) {
final Class<?> returnType = setMethod.getReturnType();
if(Void.class == returnType){
return LambdaFactory.build(BiConsumer.class, setMethod); return LambdaFactory.build(BiConsumer.class, setMethod);
} }
// 返回this的setter
final BiFunction<T, P, ?> biFunction = LambdaFactory.build(BiFunction.class, setMethod);
return biFunction::apply;
}
/** /**
* Obj::setXxx * Obj::setXxx
* *

View File

@ -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;
}
}