mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix code
This commit is contained in:
@@ -16,7 +16,6 @@ import org.dromara.hutool.core.array.ArrayUtil;
|
|||||||
import org.dromara.hutool.core.bean.path.node.NameNode;
|
import org.dromara.hutool.core.bean.path.node.NameNode;
|
||||||
import org.dromara.hutool.core.bean.path.node.Node;
|
import org.dromara.hutool.core.bean.path.node.Node;
|
||||||
import org.dromara.hutool.core.bean.path.node.NodeFactory;
|
import org.dromara.hutool.core.bean.path.node.NodeFactory;
|
||||||
import org.dromara.hutool.core.lang.Console;
|
|
||||||
import org.dromara.hutool.core.text.CharUtil;
|
import org.dromara.hutool.core.text.CharUtil;
|
||||||
import org.dromara.hutool.core.text.StrUtil;
|
import org.dromara.hutool.core.text.StrUtil;
|
||||||
|
|
||||||
@@ -45,7 +44,7 @@ import java.util.Iterator;
|
|||||||
* @author Looly
|
* @author Looly
|
||||||
* @since 6.0.0
|
* @since 6.0.0
|
||||||
*/
|
*/
|
||||||
public class BeanPath implements Node, Iterator<BeanPath> {
|
public class BeanPath implements Iterator<BeanPath> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 表达式边界符号数组
|
* 表达式边界符号数组
|
||||||
@@ -153,35 +152,41 @@ public class BeanPath implements Node, Iterator<BeanPath> {
|
|||||||
return new BeanPath(this.child);
|
return new BeanPath(this.child);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
|
* 获取路径对应的值
|
||||||
|
*
|
||||||
|
* @param bean Bean对象
|
||||||
|
* @return 路径对应的值
|
||||||
|
*/
|
||||||
public Object getValue(final Object bean) {
|
public Object getValue(final Object bean) {
|
||||||
Object value = this.node.getValue(bean);
|
final Object value = this.node.getValue(bean);
|
||||||
if (hasNext()) {
|
if (!hasNext()) {
|
||||||
value = next().getValue(value);
|
|
||||||
}
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
return next().getValue(value);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
|
* 设置路径对应的值,如果路径节点为空,自动创建之
|
||||||
|
*
|
||||||
|
* @param bean Bean对象
|
||||||
|
* @param value 设置的值
|
||||||
|
*/
|
||||||
public void setValue(Object bean, final Object value) {
|
public void setValue(Object bean, final Object value) {
|
||||||
Object parentBean;
|
Object parentBean;
|
||||||
BeanPath beanPath = this;
|
BeanPath beanPath = this;
|
||||||
while (beanPath.hasNext()) {
|
while (beanPath.hasNext()) {
|
||||||
parentBean = bean;
|
parentBean = bean;
|
||||||
bean = beanPath.node.getValue(bean);
|
bean = beanPath.node.getValue(bean);
|
||||||
beanPath = beanPath.next();
|
if (null == bean) {
|
||||||
if(null == bean && beanPath.hasNext()){
|
final BeanPath child = beanPath.next();
|
||||||
final Node node = beanPath.node;
|
bean = isListNode(child.node) ? new ArrayList<>() : new HashMap<>();
|
||||||
if(node instanceof NameNode){
|
|
||||||
bean = ((NameNode) node).isNumber() ? new ArrayList<>() : new HashMap<>();
|
|
||||||
}else{
|
|
||||||
throw new IllegalArgumentException("Invalid node to create sub bean");
|
|
||||||
}
|
|
||||||
beanPath.node.setValue(parentBean, bean);
|
beanPath.node.setValue(parentBean, bean);
|
||||||
|
// 如果自定义put方法修改了value,此处二次get避免丢失
|
||||||
|
bean = beanPath.node.getValue(parentBean);
|
||||||
}
|
}
|
||||||
|
beanPath = beanPath.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.log(beanPath, bean, value);
|
|
||||||
beanPath.node.setValue(bean, value);
|
beanPath.node.setValue(bean, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,4 +197,17 @@ public class BeanPath implements Node, Iterator<BeanPath> {
|
|||||||
", child='" + child + '\'' +
|
", child='" + child + '\'' +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 子节点值是否为列表
|
||||||
|
*
|
||||||
|
* @param node 节点
|
||||||
|
* @return 是否为列表
|
||||||
|
*/
|
||||||
|
private static boolean isListNode(final Node node) {
|
||||||
|
if (node instanceof NameNode) {
|
||||||
|
return ((NameNode) node).isNumber();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
package org.dromara.hutool.core.bean.path;
|
package org.dromara.hutool.core.bean.path;
|
||||||
|
|
||||||
import org.dromara.hutool.core.bean.BeanPathOld;
|
|
||||||
import org.dromara.hutool.core.lang.test.bean.ExamInfoDict;
|
import org.dromara.hutool.core.lang.test.bean.ExamInfoDict;
|
||||||
import org.dromara.hutool.core.lang.test.bean.UserInfoDict;
|
import org.dromara.hutool.core.lang.test.bean.UserInfoDict;
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
Reference in New Issue
Block a user