invoke support null type

This commit is contained in:
Looly 2020-11-08 18:01:24 +08:00
parent e295779330
commit b8adadda38
6 changed files with 158 additions and 108 deletions

View File

@ -9,6 +9,7 @@
* 【core 】 NumberUtil.parseInt等支持123,2.00这类数字issue#I23ORQ@Gitee * 【core 】 NumberUtil.parseInt等支持123,2.00这类数字issue#I23ORQ@Gitee
* 【core 】 增加ArrayUtil.isSub、indexOfSub、lastIndexOfSub方法issue#I23O1K@Gitee * 【core 】 增加ArrayUtil.isSub、indexOfSub、lastIndexOfSub方法issue#I23O1K@Gitee
* 【extra 】 增加ValidationUtilpr#207@Gitee * 【extra 】 增加ValidationUtilpr#207@Gitee
* 【core 】 反射调用支持传递参数的值为nullpr#1205@Github
### Bug修复 ### Bug修复
* 【core 】 修复DateUtil.current使用System.nanoTime的问题issue#1198@Github * 【core 】 修复DateUtil.current使用System.nanoTime的问题issue#1198@Github

View File

@ -2,19 +2,28 @@ package cn.hutool.core.bean;
/** /**
* 为了解决反射过程中,需要传递null参数,但是会丢失参数类型而设立的包装类 * 为了解决反射过程中,需要传递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) { public NullWrapperBean(Class<T> clazz) {
this.mClasses = classes; this.clazz = clazz;
} }
public Class<?> getClasses() { /**
return mClasses; * 获取null值对应的类型
*
* @return 类型
*/
public Class<T> getWrappedClass() {
return clazz;
} }
} }

View File

@ -146,7 +146,8 @@ public class ClassUtil {
for (int i = 0; i < objects.length; i++) { for (int i = 0; i < objects.length; i++) {
obj = objects[i]; obj = objects[i];
if (obj instanceof NullWrapperBean) { if (obj instanceof NullWrapperBean) {
classes[i] = ((NullWrapperBean) obj).getClasses(); // 自定义null值的参数类型
classes[i] = ((NullWrapperBean<?>) obj).getWrappedClass();
} else if (null == obj) { } else if (null == obj) {
classes[i] = Object.class; classes[i] = Object.class;
} else { } else {

View File

@ -904,7 +904,7 @@ public class ReflectUtil {
} else if (args[i] instanceof NullWrapperBean) { } else if (args[i] instanceof NullWrapperBean) {
//如果是通过NullWrapperBean传递的null参数,直接赋值null //如果是通过NullWrapperBean传递的null参数,直接赋值null
actualArgs[i] = 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]); final Object targetValue = Convert.convert(parameterTypes[i], args[i]);
if (null != targetValue) { if (null != targetValue) {

View File

@ -7,10 +7,9 @@ import java.util.List;
* bean 校验结果 * bean 校验结果
* *
* @author chengqiang * @author chengqiang
* @since 5.5.0
*/ */
public class BeanValidationResult { public class BeanValidationResult {
/** /**
* 校验是否成功 * 校验是否成功
*/ */
@ -29,24 +28,52 @@ public class BeanValidationResult {
this.success = success; this.success = success;
} }
/**
* 是否验证通过
*
* @return 是否验证通过
*/
public boolean isSuccess() { public boolean isSuccess() {
return success; return success;
} }
/**
* 设置是否通过
*
* @param success 是否通过
* @return this
*/
public BeanValidationResult setSuccess(boolean success) { public BeanValidationResult setSuccess(boolean success) {
this.success = success; this.success = success;
return this; return this;
} }
/**
* 获取错误信息列表
*
* @return 错误信息列表
*/
public List<ErrorMessage> getErrorMessages() { public List<ErrorMessage> getErrorMessages() {
return errorMessages; return errorMessages;
} }
/**
* 设置错误信息列表
*
* @param errorMessages 错误信息列表
* @return this
*/
public BeanValidationResult setErrorMessages(List<ErrorMessage> errorMessages) { public BeanValidationResult setErrorMessages(List<ErrorMessage> errorMessages) {
this.errorMessages = errorMessages; this.errorMessages = errorMessages;
return this; return this;
} }
/**
* 增加错误信息
*
* @param errorMessage 错误信息
* @return this
*/
public BeanValidationResult addErrorMessage(ErrorMessage errorMessage) { public BeanValidationResult addErrorMessage(ErrorMessage errorMessage) {
this.errorMessages.add(errorMessage); this.errorMessages.add(errorMessage);
return this; return this;

View File

@ -15,15 +15,27 @@ import java.util.Set;
* <p>注意hibernate-validator还依赖了javax.el需自行引入</p> * <p>注意hibernate-validator还依赖了javax.el需自行引入</p>
* *
* @author chengqiang * @author chengqiang
* @since 5.5.0
*/ */
public class ValidationUtil { public class ValidationUtil {
/**
* 默认{@link Validator} 对象
*/
private static final Validator validator; private static final Validator validator;
static { static {
validator = Validation.buildDefaultValidatorFactory().getValidator(); validator = Validation.buildDefaultValidatorFactory().getValidator();
} }
/**
* 获取原生{@link Validator} 对象
*
* @return {@link Validator} 对象
*/
public static Validator getValidator() {
return validator;
}
/** /**
* 校验对象 * 校验对象
* *