diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/BeanPath.java b/hutool-core/src/main/java/cn/hutool/core/bean/BeanPath.java index 3b8bf45e4..a5feb0f91 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/BeanPath.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/BeanPath.java @@ -15,6 +15,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; /** * Bean路径表达式,用于获取多层嵌套Bean中的字段值或Bean对象
@@ -116,6 +117,7 @@ public class BeanPath implements Serializable { * @param value 值 */ public void set(final Object bean, final Object value) { + Objects.requireNonNull(bean); set(bean, this.patternParts, lastIsNumber(this.patternParts), value); } @@ -140,15 +142,15 @@ public class BeanPath implements Serializable { * @param patternParts 表达式块列表 * @param value 值 */ - private void set(final Object bean, final List patternParts, final boolean nextNumberPart, final Object value) { + private Object set(final Object bean, final List patternParts, final boolean nextNumberPart, final Object value) { Object subBean = this.get(patternParts, bean, true); if (null == subBean) { final List parentParts = getParentParts(patternParts); - this.set(bean, parentParts, lastIsNumber(parentParts), nextNumberPart ? new ArrayList<>() : new HashMap<>()); - //set中有可能做过转换,因此此处重新获取bean - subBean = this.get(patternParts, bean, true); + // 避免get方法的重复调用 + subBean = this.set(bean, parentParts, lastIsNumber(parentParts), nextNumberPart ? new ArrayList<>() : new HashMap<>()); } BeanUtil.setFieldValue(subBean, patternParts.get(patternParts.size() - 1), value); + return value; } /**