优化BeanPath.set方法,避免多次重复调用get方法

This commit is contained in:
Looly 2022-11-10 09:30:32 +08:00
parent dacf9c80bb
commit 3b98f64924
3 changed files with 20 additions and 4 deletions

View File

@ -3,7 +3,7 @@
-------------------------------------------------------------------------------------------------------------
# 5.8.10.M1 (2022-11-08)
# 5.8.10.M1 (2022-11-10)
### 🐣新特性
* 【http 】 HttpResponse增加getFileNameFromDisposition方法pr#2676@Github
@ -11,6 +11,7 @@
* 【db 】 DialectFactory增加identifyDriver重载issue#I5YWI6@Gitee
* 【core 】 去除ClassloaderUtil的Cacheissue#I5YWI6@Gitee
* 【core 】 ClassScanner 增加忽略加载错误类的扫描方法pr#855@Gitee
* 【core 】 优化BeanPath.set方法避免多次重复调用get方法pr#865@Gitee
### 🐞Bug修复
* 【db 】 修复分页时order by截断问题issue#I5X6FM@Gitee

View File

@ -139,16 +139,18 @@ public class BeanPath implements Serializable {
* @param bean BeanMap或List
* @param patternParts 表达式块列表
* @param value
* @return
*/
private void set(Object bean, List<String> patternParts, boolean nextNumberPart, Object value) {
private Object set(Object bean, List<String> patternParts, boolean nextNumberPart, 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;
}
/**

View File

@ -0,0 +1,13 @@
package cn.hutool.core.date.chinese;
import cn.hutool.core.date.ChineseDate;
import cn.hutool.core.lang.Console;
import org.junit.Test;
public class IssueI5YB1ATest {
@Test
public void chineseDateTest() {
final ChineseDate date = new ChineseDate(2023, 4, 8, true);
Console.log(date.getGregorianDate());
}
}