From e9488f8e65ee443effa119423511ec33d8742c84 Mon Sep 17 00:00:00 2001
From: emptypoint <1215582715@qq.com>
Date: Wed, 9 Nov 2022 19:27:55 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96BeanPath.set=E6=96=B9?=
=?UTF-8?q?=E6=B3=95=EF=BC=8C=E9=81=BF=E5=85=8D=E5=A4=9A=E6=AC=A1=E9=87=8D?=
=?UTF-8?q?=E5=A4=8D=E8=B0=83=E7=94=A8get=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/cn/hutool/core/bean/BeanPath.java | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
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;
}
/**