mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix cod
This commit is contained in:
@@ -3,6 +3,9 @@ package cn.hutool.setting;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.bean.copier.ValueProvider;
|
||||
import cn.hutool.core.lang.func.LambdaInfo;
|
||||
import cn.hutool.core.lang.func.LambdaUtil;
|
||||
import cn.hutool.core.lang.func.SerFunction;
|
||||
import cn.hutool.core.lang.getter.GroupedTypeGetter;
|
||||
import cn.hutool.core.lang.getter.TypeGetter;
|
||||
import cn.hutool.core.reflect.ConstructorUtil;
|
||||
@@ -35,6 +38,19 @@ public abstract class AbsSetting implements TypeGetter<CharSequence>,
|
||||
return ObjUtil.defaultIfNull(getObjByGroup(key, DEFAULT_GROUP), defaultValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据lambda的方法引用,获取
|
||||
*
|
||||
* @param func 方法引用
|
||||
* @param <P> 参数类型
|
||||
* @param <T> 返回值类型
|
||||
* @return 获取表达式对应属性和返回的对象
|
||||
*/
|
||||
public <P, T> T get(final SerFunction<P, T> func) {
|
||||
final LambdaInfo lambdaInfo = LambdaUtil.resolve(func);
|
||||
return get(lambdaInfo.getFieldName(), lambdaInfo.getReturnType());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得字符串类型值,如果字符串为{@code null}或者""返回默认值
|
||||
*
|
||||
|
@@ -10,6 +10,8 @@ import cn.hutool.core.io.watch.SimpleWatcher;
|
||||
import cn.hutool.core.io.watch.WatchMonitor;
|
||||
import cn.hutool.core.io.watch.WatchUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.lang.func.LambdaUtil;
|
||||
import cn.hutool.core.lang.func.SerSupplier;
|
||||
import cn.hutool.core.text.StrUtil;
|
||||
import cn.hutool.core.util.CharUtil;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
@@ -21,6 +23,7 @@ import java.net.URL;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.WatchEvent;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
@@ -577,6 +580,22 @@ public class Setting extends AbsSetting implements Map<String, String> {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过lambda批量设置值<br>
|
||||
* 实际使用时,可以使用getXXX的方法引用来完成键值对的赋值:
|
||||
* <pre>
|
||||
* User user = GenericBuilder.of(User::new).with(User::setUsername, "hutool").build();
|
||||
* Setting.of().setFields(user::getNickname, user::getUsername);
|
||||
* </pre>
|
||||
*
|
||||
* @param fields lambda,不能为空
|
||||
* @return this
|
||||
*/
|
||||
public Setting setFields(final SerSupplier<String>... fields) {
|
||||
Arrays.stream(fields).forEach(f -> set(LambdaUtil.getFieldName(f), f.get()));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将键值对加入到对应分组中<br>
|
||||
* 此方法用于与getXXX统一参数顺序
|
||||
|
@@ -11,6 +11,10 @@ import cn.hutool.core.io.watch.SimpleWatcher;
|
||||
import cn.hutool.core.io.watch.WatchMonitor;
|
||||
import cn.hutool.core.io.watch.WatchUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.lang.func.LambdaInfo;
|
||||
import cn.hutool.core.lang.func.LambdaUtil;
|
||||
import cn.hutool.core.lang.func.SerFunction;
|
||||
import cn.hutool.core.lang.func.SerSupplier;
|
||||
import cn.hutool.core.lang.getter.TypeGetter;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.reflect.ConstructorUtil;
|
||||
@@ -27,6 +31,7 @@ import java.net.URL;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.WatchEvent;
|
||||
import java.util.Arrays;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
@@ -230,6 +235,19 @@ public final class Props extends Properties implements TypeGetter<CharSequence>
|
||||
return ObjUtil.defaultIfNull(getProperty(StrUtil.str(key)), defaultValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据lambda的方法引用,获取
|
||||
*
|
||||
* @param func 方法引用
|
||||
* @param <P> 参数类型
|
||||
* @param <T> 返回值类型
|
||||
* @return 获取表达式对应属性和返回的对象
|
||||
*/
|
||||
public <P, T> T get(final SerFunction<P, T> func) {
|
||||
final LambdaInfo lambdaInfo = LambdaUtil.resolve(func);
|
||||
return get(lambdaInfo.getFieldName(), lambdaInfo.getReturnType());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取并删除键值对,当指定键对应值非空时,返回并删除这个值,后边的键对应的值不再查找
|
||||
*
|
||||
@@ -353,10 +371,26 @@ public final class Props extends Properties implements TypeGetter<CharSequence>
|
||||
* @param key 属性键
|
||||
* @param value 属性值
|
||||
*/
|
||||
public void setProperty(final String key, final Object value) {
|
||||
public void set(final String key, final Object value) {
|
||||
super.setProperty(key, value.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过lambda批量设置值<br>
|
||||
* 实际使用时,可以使用getXXX的方法引用来完成键值对的赋值:
|
||||
* <pre>
|
||||
* User user = GenericBuilder.of(User::new).with(User::setUsername, "hutool").build();
|
||||
* Setting.of().setFields(user::getNickname, user::getUsername);
|
||||
* </pre>
|
||||
*
|
||||
* @param fields lambda,不能为空
|
||||
* @return this
|
||||
*/
|
||||
public Props setFields(final SerSupplier<?>... fields) {
|
||||
Arrays.stream(fields).forEach(f -> set(LambdaUtil.getFieldName(f), f.get()));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 持久化当前设置,会覆盖掉之前的设置
|
||||
*
|
||||
|
@@ -67,11 +67,11 @@ public class PropsTest {
|
||||
public void toBeanWithNullPrefixTest(){
|
||||
final Props configProp = new Props();
|
||||
|
||||
configProp.setProperty("createTime", Objects.requireNonNull(DateUtil.parse("2020-01-01")));
|
||||
configProp.setProperty("isInit", true);
|
||||
configProp.setProperty("stairPlan", 1);
|
||||
configProp.setProperty("stageNum", 2);
|
||||
configProp.setProperty("version", 3);
|
||||
configProp.set("createTime", Objects.requireNonNull(DateUtil.parse("2020-01-01")));
|
||||
configProp.set("isInit", true);
|
||||
configProp.set("stairPlan", 1);
|
||||
configProp.set("stageNum", 2);
|
||||
configProp.set("version", 3);
|
||||
final SystemConfig systemConfig = configProp.toBean(SystemConfig.class);
|
||||
|
||||
Assert.assertEquals(DateUtil.parse("2020-01-01"), systemConfig.getCreateTime());
|
||||
|
Reference in New Issue
Block a user