mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
!865 优化BeanPath.set方法,避免多次重复调用get方法
Merge pull request !865 from emptypoint/update-BeanPath
This commit is contained in:
commit
912c3e116d
@ -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对象<br>
|
||||
@ -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<String> patternParts, final boolean nextNumberPart, final Object value) {
|
||||
private Object set(final Object bean, final List<String> patternParts, final boolean nextNumberPart, final Object value) {
|
||||
Object subBean = this.get(patternParts, bean, true);
|
||||
if (null == subBean) {
|
||||
final List<String> 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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user