mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
invoke support null type
This commit is contained in:
parent
e295779330
commit
b8adadda38
@ -9,6 +9,7 @@
|
||||
* 【core 】 NumberUtil.parseInt等支持123,2.00这类数字(issue#I23ORQ@Gitee)
|
||||
* 【core 】 增加ArrayUtil.isSub、indexOfSub、lastIndexOfSub方法(issue#I23O1K@Gitee)
|
||||
* 【extra 】 增加ValidationUtil(pr#207@Gitee)
|
||||
* 【core 】 反射调用支持传递参数的值为null(pr#1205@Github)
|
||||
|
||||
### Bug修复
|
||||
* 【core 】 修复DateUtil.current使用System.nanoTime的问题(issue#1198@Github)
|
||||
|
@ -2,19 +2,28 @@ package cn.hutool.core.bean;
|
||||
|
||||
/**
|
||||
* 为了解决反射过程中,需要传递null参数,但是会丢失参数类型而设立的包装类
|
||||
*
|
||||
* @param <T> Null值对应的类型
|
||||
* @author Lillls
|
||||
* @since 5.5.0
|
||||
*/
|
||||
public class NullWrapperBean {
|
||||
public class NullWrapperBean<T> {
|
||||
|
||||
private final Class<?> mClasses;
|
||||
private final Class<T> clazz;
|
||||
|
||||
/**
|
||||
* @param classes null的类型
|
||||
* @param clazz null的类型
|
||||
*/
|
||||
public NullWrapperBean(Class<?> classes) {
|
||||
this.mClasses = classes;
|
||||
public NullWrapperBean(Class<T> clazz) {
|
||||
this.clazz = clazz;
|
||||
}
|
||||
|
||||
public Class<?> getClasses() {
|
||||
return mClasses;
|
||||
/**
|
||||
* 获取null值对应的类型
|
||||
*
|
||||
* @return 类型
|
||||
*/
|
||||
public Class<T> getWrappedClass() {
|
||||
return clazz;
|
||||
}
|
||||
}
|
||||
|
@ -146,7 +146,8 @@ public class ClassUtil {
|
||||
for (int i = 0; i < objects.length; i++) {
|
||||
obj = objects[i];
|
||||
if (obj instanceof NullWrapperBean) {
|
||||
classes[i] = ((NullWrapperBean) obj).getClasses();
|
||||
// 自定义null值的参数类型
|
||||
classes[i] = ((NullWrapperBean<?>) obj).getWrappedClass();
|
||||
} else if (null == obj) {
|
||||
classes[i] = Object.class;
|
||||
} else {
|
||||
|
@ -904,7 +904,7 @@ public class ReflectUtil {
|
||||
} else if (args[i] instanceof NullWrapperBean) {
|
||||
//如果是通过NullWrapperBean传递的null参数,直接赋值null
|
||||
actualArgs[i] = null;
|
||||
} else if (!parameterTypes[i].isAssignableFrom(args[i].getClass())) {
|
||||
} else if (false == parameterTypes[i].isAssignableFrom(args[i].getClass())) {
|
||||
//对于类型不同的字段,尝试转换,转换失败则使用原对象类型
|
||||
final Object targetValue = Convert.convert(parameterTypes[i], args[i]);
|
||||
if (null != targetValue) {
|
||||
|
@ -7,10 +7,9 @@ import java.util.List;
|
||||
* bean 校验结果
|
||||
*
|
||||
* @author chengqiang
|
||||
* @since 5.5.0
|
||||
*/
|
||||
|
||||
public class BeanValidationResult {
|
||||
|
||||
/**
|
||||
* 校验是否成功
|
||||
*/
|
||||
@ -29,24 +28,52 @@ public class BeanValidationResult {
|
||||
this.success = success;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否验证通过
|
||||
*
|
||||
* @return 是否验证通过
|
||||
*/
|
||||
public boolean isSuccess() {
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置是否通过
|
||||
*
|
||||
* @param success 是否通过
|
||||
* @return this
|
||||
*/
|
||||
public BeanValidationResult setSuccess(boolean success) {
|
||||
this.success = success;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取错误信息列表
|
||||
*
|
||||
* @return 错误信息列表
|
||||
*/
|
||||
public List<ErrorMessage> getErrorMessages() {
|
||||
return errorMessages;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置错误信息列表
|
||||
*
|
||||
* @param errorMessages 错误信息列表
|
||||
* @return this
|
||||
*/
|
||||
public BeanValidationResult setErrorMessages(List<ErrorMessage> errorMessages) {
|
||||
this.errorMessages = errorMessages;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 增加错误信息
|
||||
*
|
||||
* @param errorMessage 错误信息
|
||||
* @return this
|
||||
*/
|
||||
public BeanValidationResult addErrorMessage(ErrorMessage errorMessage) {
|
||||
this.errorMessages.add(errorMessage);
|
||||
return this;
|
||||
|
@ -15,15 +15,27 @@ import java.util.Set;
|
||||
* <p>注意:hibernate-validator还依赖了javax.el,需自行引入。</p>
|
||||
*
|
||||
* @author chengqiang
|
||||
* @since 5.5.0
|
||||
*/
|
||||
public class ValidationUtil {
|
||||
|
||||
/**
|
||||
* 默认{@link Validator} 对象
|
||||
*/
|
||||
private static final Validator validator;
|
||||
|
||||
static {
|
||||
validator = Validation.buildDefaultValidatorFactory().getValidator();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取原生{@link Validator} 对象
|
||||
*
|
||||
* @return {@link Validator} 对象
|
||||
*/
|
||||
public static Validator getValidator() {
|
||||
return validator;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验对象
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user