This commit is contained in:
Looly 2022-05-05 00:55:02 +08:00
parent 29255272b5
commit 663be40590
17 changed files with 130 additions and 118 deletions

View File

@ -1,8 +1,8 @@
package cn.hutool.core.compiler; package cn.hutool.core.compiler;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.compress.ZipUtil; import cn.hutool.core.compress.ZipUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.reflect.ConstructorUtil;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@ -36,7 +36,7 @@ public class JavaSourceCompilerTest {
// .addLibrary(FileUtil.file("D:\\m2_repo\\cn\\hutool\\hutool-all\\5.5.7\\hutool-all-5.5.7.jar")) // .addLibrary(FileUtil.file("D:\\m2_repo\\cn\\hutool\\hutool-all\\5.5.7\\hutool-all-5.5.7.jar"))
.compile(); .compile();
final Class<?> clazz = classLoader.loadClass("c.C"); final Class<?> clazz = classLoader.loadClass("c.C");
final Object obj = ReflectUtil.newInstance(clazz); final Object obj = ConstructorUtil.newInstance(clazz);
Assert.assertTrue(String.valueOf(obj).startsWith("c.C@")); Assert.assertTrue(String.valueOf(obj).startsWith("c.C@"));
} }

View File

@ -0,0 +1,39 @@
package cn.hutool.core.reflect;
import cn.hutool.core.date.Week;
import org.junit.Assert;
import org.junit.Test;
import java.util.Collection;
import java.util.Map;
public class ConstructorUtilTest {
@Test
public void noneStaticInnerClassTest() {
final ReflectUtilTest.NoneStaticClass testAClass = ConstructorUtil.newInstanceIfPossible(ReflectUtilTest.NoneStaticClass.class);
Assert.assertNotNull(testAClass);
Assert.assertEquals(2, testAClass.getA());
}
@Test
public void newInstanceIfPossibleTest(){
//noinspection ConstantConditions
final int intValue = ConstructorUtil.newInstanceIfPossible(int.class);
Assert.assertEquals(0, intValue);
final Integer integer = ConstructorUtil.newInstanceIfPossible(Integer.class);
Assert.assertEquals(new Integer(0), integer);
final Map<?, ?> map = ConstructorUtil.newInstanceIfPossible(Map.class);
Assert.assertNotNull(map);
final Collection<?> collection = ConstructorUtil.newInstanceIfPossible(Collection.class);
Assert.assertNotNull(collection);
final Week week = ConstructorUtil.newInstanceIfPossible(Week.class);
Assert.assertEquals(Week.SUNDAY, week);
final int[] intArray = ConstructorUtil.newInstanceIfPossible(int[].class);
Assert.assertArrayEquals(new int[0], intArray);
}
}

View File

@ -0,0 +1,42 @@
package cn.hutool.core.reflect;
import org.junit.Assert;
import org.junit.Test;
import java.lang.reflect.Field;
public class FieldUtilTest {
@Test
public void getFieldTest() {
// 能够获取到父类字段
final Field privateField = FieldUtil.getField(ReflectUtilTest.TestSubClass.class, "privateField");
Assert.assertNotNull(privateField);
}
@Test
public void getFieldsTest() {
// 能够获取到父类字段
final Field[] fields = FieldUtil.getFields(ReflectUtilTest.TestSubClass.class);
Assert.assertEquals(4, fields.length);
}
@Test
public void setFieldTest() {
final ReflectUtilTest.AClass testClass = new ReflectUtilTest.AClass();
FieldUtil.setFieldValue(testClass, "a", "111");
Assert.assertEquals(111, testClass.getA());
}
@Test
public void getDeclaredField() {
final Field noField = FieldUtil.getField(ReflectUtilTest.TestSubClass.class, "noField");
Assert.assertNull(noField);
// 获取不到父类字段
final Field field = FieldUtil.getDeClearField(ReflectUtilTest.TestSubClass.class, "field");
Assert.assertNull(field);
final Field subField = FieldUtil.getField(ReflectUtilTest.TestSubClass.class, "subField");
Assert.assertNotNull(subField);
}
}

View File

@ -1,13 +1,6 @@
package cn.hutool.core.reflect; package cn.hutool.core.reflect;
import cn.hutool.core.date.Week;
import lombok.Data; import lombok.Data;
import org.junit.Assert;
import org.junit.Test;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Map;
/** /**
* 反射工具类单元测试 * 反射工具类单元测试
@ -16,34 +9,6 @@ import java.util.Map;
*/ */
public class ReflectUtilTest { public class ReflectUtilTest {
@Test
public void getFieldTest() {
// 能够获取到父类字段
final Field privateField = ReflectUtil.getField(TestSubClass.class, "privateField");
Assert.assertNotNull(privateField);
}
@Test
public void getFieldsTest() {
// 能够获取到父类字段
final Field[] fields = ReflectUtil.getFields(TestSubClass.class);
Assert.assertEquals(4, fields.length);
}
@Test
public void setFieldTest() {
final AClass testClass = new AClass();
ReflectUtil.setFieldValue(testClass, "a", "111");
Assert.assertEquals(111, testClass.getA());
}
@Test
public void noneStaticInnerClassTest() {
final NoneStaticClass testAClass = ReflectUtil.newInstanceIfPossible(NoneStaticClass.class);
Assert.assertNotNull(testAClass);
Assert.assertEquals(2, testAClass.getA());
}
@Data @Data
static class AClass { static class AClass {
private int a; private int a;
@ -117,41 +82,6 @@ public class ReflectUtilTest {
} }
} }
@Test
public void newInstanceIfPossibleTest(){
//noinspection ConstantConditions
final int intValue = ReflectUtil.newInstanceIfPossible(int.class);
Assert.assertEquals(0, intValue);
final Integer integer = ReflectUtil.newInstanceIfPossible(Integer.class);
Assert.assertEquals(new Integer(0), integer);
final Map<?, ?> map = ReflectUtil.newInstanceIfPossible(Map.class);
Assert.assertNotNull(map);
final Collection<?> collection = ReflectUtil.newInstanceIfPossible(Collection.class);
Assert.assertNotNull(collection);
final Week week = ReflectUtil.newInstanceIfPossible(Week.class);
Assert.assertEquals(Week.SUNDAY, week);
final int[] intArray = ReflectUtil.newInstanceIfPossible(int[].class);
Assert.assertArrayEquals(new int[0], intArray);
}
@Test
public void getDeclaredField() {
final Field noField = ReflectUtil.getField(TestSubClass.class, "noField");
Assert.assertNull(noField);
// 获取不到父类字段
final Field field = ReflectUtil.getDeClearField(TestSubClass.class, "field");
Assert.assertNull(field);
final Field subField = ReflectUtil.getField(TestSubClass.class, "subField");
Assert.assertNotNull(subField);
}
@SuppressWarnings("unused") @SuppressWarnings("unused")
static class TestClass { static class TestClass {
private String privateField; private String privateField;

View File

@ -1,7 +1,7 @@
package cn.hutool.core.util; package cn.hutool.core.util;
import cn.hutool.core.reflect.FieldUtil;
import cn.hutool.core.reflect.MethodUtil; import cn.hutool.core.reflect.MethodUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.reflect.TypeUtil; import cn.hutool.core.reflect.TypeUtil;
import lombok.Data; import lombok.Data;
import org.junit.Assert; import org.junit.Assert;
@ -65,7 +65,7 @@ public class TypeUtilTest {
public void getActualTypesTest(){ public void getActualTypesTest(){
// 测试多层级泛型参数是否能获取成功 // 测试多层级泛型参数是否能获取成功
final Type idType = TypeUtil.getActualType(Level3.class, final Type idType = TypeUtil.getActualType(Level3.class,
ReflectUtil.getField(Level3.class, "id")); FieldUtil.getField(Level3.class, "id"));
Assert.assertEquals(Long.class, idType); Assert.assertEquals(Long.class, idType);
} }

View File

@ -2,8 +2,8 @@ package cn.hutool.cron.task;
import cn.hutool.core.classloader.ClassLoaderUtil; import cn.hutool.core.classloader.ClassLoaderUtil;
import cn.hutool.core.exceptions.UtilException; import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.reflect.ConstructorUtil;
import cn.hutool.core.reflect.MethodUtil; import cn.hutool.core.reflect.MethodUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.text.StrUtil; import cn.hutool.core.text.StrUtil;
import cn.hutool.cron.CronException; import cn.hutool.cron.CronException;
@ -44,7 +44,7 @@ public class InvokeTask implements Task{
if(null == clazz) { if(null == clazz) {
throw new IllegalArgumentException("Load class with name of [" + className + "] fail !"); throw new IllegalArgumentException("Load class with name of [" + className + "] fail !");
} }
this.obj = ReflectUtil.newInstanceIfPossible(clazz); this.obj = ConstructorUtil.newInstanceIfPossible(clazz);
//方法 //方法
final String methodName = classNameWithMethodName.substring(splitIndex + 1); final String methodName = classNameWithMethodName.substring(splitIndex + 1);

View File

@ -4,11 +4,11 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.PropDesc; import cn.hutool.core.bean.PropDesc;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.reflect.ConstructorUtil;
import cn.hutool.core.reflect.MethodUtil; import cn.hutool.core.reflect.MethodUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.text.StrUtil;
import cn.hutool.core.reflect.TypeUtil; import cn.hutool.core.reflect.TypeUtil;
import cn.hutool.core.text.StrUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.db.DbRuntimeException; import cn.hutool.db.DbRuntimeException;
import cn.hutool.db.Entity; import cn.hutool.db.Entity;
@ -84,7 +84,7 @@ public class ResultSetUtil {
} }
//普通bean //普通bean
final T bean = ReflectUtil.newInstanceIfPossible(beanClass); final T bean = ConstructorUtil.newInstanceIfPossible(beanClass);
//忽略字段大小写 //忽略字段大小写
final Map<String, PropDesc> propMap = BeanUtil.getBeanDesc(beanClass).getPropMap(true); final Map<String, PropDesc> propMap = BeanUtil.getBeanDesc(beanClass).getPropMap(true);
String columnLabel; String columnLabel;

View File

@ -1,8 +1,8 @@
package cn.hutool.extra.aop.proxy; package cn.hutool.extra.aop.proxy;
import cn.hutool.extra.aop.aspects.Aspect; import cn.hutool.core.reflect.ConstructorUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.util.ServiceLoaderUtil; import cn.hutool.core.util.ServiceLoaderUtil;
import cn.hutool.extra.aop.aspects.Aspect;
import java.io.Serializable; import java.io.Serializable;
@ -25,7 +25,7 @@ public abstract class ProxyFactory implements Serializable {
* @since 5.3.1 * @since 5.3.1
*/ */
public <T> T proxy(final T target, final Class<? extends Aspect> aspectClass) { public <T> T proxy(final T target, final Class<? extends Aspect> aspectClass) {
return proxy(target, ReflectUtil.newInstanceIfPossible(aspectClass)); return proxy(target, ConstructorUtil.newInstanceIfPossible(aspectClass));
} }
/** /**
@ -47,7 +47,7 @@ public abstract class ProxyFactory implements Serializable {
* @return 代理对象 * @return 代理对象
*/ */
public static <T> T createProxy(final T target, final Class<? extends Aspect> aspectClass) { public static <T> T createProxy(final T target, final Class<? extends Aspect> aspectClass) {
return createProxy(target, ReflectUtil.newInstance(aspectClass)); return createProxy(target, ConstructorUtil.newInstance(aspectClass));
} }
/** /**

View File

@ -1,7 +1,7 @@
package cn.hutool.extra.cglib; package cn.hutool.extra.cglib;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.reflect.ReflectUtil; import cn.hutool.core.reflect.ConstructorUtil;
import net.sf.cglib.beans.BeanCopier; import net.sf.cglib.beans.BeanCopier;
import net.sf.cglib.beans.BeanMap; import net.sf.cglib.beans.BeanMap;
import net.sf.cglib.core.Converter; import net.sf.cglib.core.Converter;
@ -45,7 +45,7 @@ public class CglibUtil {
* @return 目标对象 * @return 目标对象
*/ */
public static <T> T copy(final Object source, final Class<T> targetClass, final Converter converter) { public static <T> T copy(final Object source, final Class<T> targetClass, final Converter converter) {
final T target = ReflectUtil.newInstanceIfPossible(targetClass); final T target = ConstructorUtil.newInstanceIfPossible(targetClass);
copy(source, target, converter); copy(source, target, converter);
return target; return target;
} }
@ -178,6 +178,6 @@ public class CglibUtil {
*/ */
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public static <T> T toBean(final Map map, final Class<T> beanClass){ public static <T> T toBean(final Map map, final Class<T> beanClass){
return fillBean(map, ReflectUtil.newInstanceIfPossible(beanClass)); return fillBean(map, ConstructorUtil.newInstanceIfPossible(beanClass));
} }
} }

View File

@ -15,11 +15,11 @@ import cn.hutool.core.net.NetUtil;
import cn.hutool.core.net.URLEncoder; import cn.hutool.core.net.URLEncoder;
import cn.hutool.core.net.multipart.MultipartFormData; import cn.hutool.core.net.multipart.MultipartFormData;
import cn.hutool.core.net.multipart.UploadSetting; import cn.hutool.core.net.multipart.UploadSetting;
import cn.hutool.core.reflect.ConstructorUtil;
import cn.hutool.core.text.StrUtil;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.text.StrUtil;
import jakarta.servlet.ServletOutputStream; import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletRequest;
import jakarta.servlet.http.Cookie; import jakarta.servlet.http.Cookie;
@ -182,7 +182,7 @@ public class JakartaServletUtil {
* @return Bean * @return Bean
*/ */
public static <T> T toBean(final ServletRequest request, final Class<T> beanClass, final boolean isIgnoreError) { public static <T> T toBean(final ServletRequest request, final Class<T> beanClass, final boolean isIgnoreError) {
return fillBean(request, ReflectUtil.newInstanceIfPossible(beanClass), isIgnoreError); return fillBean(request, ConstructorUtil.newInstanceIfPossible(beanClass), isIgnoreError);
} }
// --------------------------------------------------------- fillBean end // --------------------------------------------------------- fillBean end

View File

@ -15,11 +15,11 @@ import cn.hutool.core.net.NetUtil;
import cn.hutool.core.net.URLEncoder; import cn.hutool.core.net.URLEncoder;
import cn.hutool.core.net.multipart.MultipartFormData; import cn.hutool.core.net.multipart.MultipartFormData;
import cn.hutool.core.net.multipart.UploadSetting; import cn.hutool.core.net.multipart.UploadSetting;
import cn.hutool.core.reflect.ConstructorUtil;
import cn.hutool.core.text.StrUtil;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.text.StrUtil;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
@ -182,7 +182,7 @@ public class ServletUtil {
* @return Bean * @return Bean
*/ */
public static <T> T toBean(final ServletRequest request, final Class<T> beanClass, final boolean isIgnoreError) { public static <T> T toBean(final ServletRequest request, final Class<T> beanClass, final boolean isIgnoreError) {
return fillBean(request, ReflectUtil.newInstanceIfPossible(beanClass), isIgnoreError); return fillBean(request, ConstructorUtil.newInstanceIfPossible(beanClass), isIgnoreError);
} }
// --------------------------------------------------------- fillBean end // --------------------------------------------------------- fillBean end

View File

@ -1,9 +1,9 @@
package cn.hutool.extra.template.engine; package cn.hutool.extra.template.engine;
import cn.hutool.core.lang.Singleton; import cn.hutool.core.lang.Singleton;
import cn.hutool.core.reflect.ReflectUtil; import cn.hutool.core.reflect.ConstructorUtil;
import cn.hutool.core.util.ServiceLoaderUtil;
import cn.hutool.core.text.StrUtil; import cn.hutool.core.text.StrUtil;
import cn.hutool.core.util.ServiceLoaderUtil;
import cn.hutool.extra.template.TemplateConfig; import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateException; import cn.hutool.extra.template.TemplateException;
@ -61,7 +61,7 @@ public class TemplateFactory {
final Class<? extends TemplateEngine> customEngineClass = config.getCustomEngine(); final Class<? extends TemplateEngine> customEngineClass = config.getCustomEngine();
final TemplateEngine engine; final TemplateEngine engine;
if(null != customEngineClass){ if(null != customEngineClass){
engine = ReflectUtil.newInstance(customEngineClass); engine = ConstructorUtil.newInstance(customEngineClass);
}else{ }else{
engine = ServiceLoaderUtil.loadFirstAvailable(TemplateEngine.class); engine = ServiceLoaderUtil.loadFirstAvailable(TemplateEngine.class);
} }

View File

@ -1,10 +1,10 @@
package cn.hutool.http; package cn.hutool.http;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.text.StrUtil;
import cn.hutool.core.net.URLUtil; import cn.hutool.core.net.URLUtil;
import cn.hutool.core.reflect.FieldUtil;
import cn.hutool.core.text.StrUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.http.ssl.DefaultSSLInfo; import cn.hutool.http.ssl.DefaultSSLInfo;
import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HostnameVerifier;
@ -453,7 +453,7 @@ public class HttpConnection {
// 修改为POST而且无法调用setRequestMethod方法修改因此此处使用反射强制修改字段属性值 // 修改为POST而且无法调用setRequestMethod方法修改因此此处使用反射强制修改字段属性值
// https://stackoverflow.com/questions/978061/http-get-with-request-body/983458 // https://stackoverflow.com/questions/978061/http-get-with-request-body/983458
if(method == Method.GET && method != getMethod()){ if(method == Method.GET && method != getMethod()){
ReflectUtil.setFieldValue(this.conn, "method", Method.GET.name()); FieldUtil.setFieldValue(this.conn, "method", Method.GET.name());
} }
return out; return out;

View File

@ -1,8 +1,8 @@
package cn.hutool.http; package cn.hutool.http;
import cn.hutool.core.reflect.FieldUtil;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.http.cookie.GlobalCookieManager; import cn.hutool.http.cookie.GlobalCookieManager;
import java.io.Serializable; import java.io.Serializable;
@ -192,20 +192,20 @@ public class HttpGlobalConfig implements Serializable {
if (isAllowPatch) { if (isAllowPatch) {
return; return;
} }
final Field methodsField = ReflectUtil.getField(HttpURLConnection.class, "methods"); final Field methodsField = FieldUtil.getField(HttpURLConnection.class, "methods");
if (null == methodsField) { if (null == methodsField) {
throw new HttpException("None static field [methods] with Java version: [{}]", System.getProperty("java.version")); throw new HttpException("None static field [methods] with Java version: [{}]", System.getProperty("java.version"));
} }
// 去除final修饰 // 去除final修饰
ReflectUtil.setFieldValue(methodsField, "modifiers", methodsField.getModifiers() & ~Modifier.FINAL); FieldUtil.setFieldValue(methodsField, "modifiers", methodsField.getModifiers() & ~Modifier.FINAL);
final String[] methods = { final String[] methods = {
"GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE", "PATCH" "GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE", "PATCH"
}; };
ReflectUtil.setFieldValue(null, methodsField, methods); FieldUtil.setFieldValue(null, methodsField, methods);
// 检查注入是否成功 // 检查注入是否成功
final Object staticFieldValue = ReflectUtil.getStaticFieldValue(methodsField); final Object staticFieldValue = FieldUtil.getStaticFieldValue(methodsField);
if (false == ArrayUtil.equals(methods, staticFieldValue)) { if (false == ArrayUtil.equals(methods, staticFieldValue)) {
throw new HttpException("Inject value to field [methods] failed!"); throw new HttpException("Inject value to field [methods] failed!");
} }

View File

@ -7,10 +7,10 @@ import cn.hutool.core.convert.Converter;
import cn.hutool.core.convert.ConverterRegistry; import cn.hutool.core.convert.ConverterRegistry;
import cn.hutool.core.convert.impl.ArrayConverter; import cn.hutool.core.convert.impl.ArrayConverter;
import cn.hutool.core.convert.impl.BeanConverter; import cn.hutool.core.convert.impl.BeanConverter;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.reflect.ConstructorUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.text.StrUtil;
import cn.hutool.core.reflect.TypeUtil; import cn.hutool.core.reflect.TypeUtil;
import cn.hutool.core.text.StrUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.json.serialize.GlobalSerializeMapping; import cn.hutool.json.serialize.GlobalSerializeMapping;
import cn.hutool.json.serialize.JSONDeserializer; import cn.hutool.json.serialize.JSONDeserializer;
@ -78,7 +78,8 @@ public class JSONConverter implements Converter<JSON> {
if(targetType instanceof Class){ if(targetType instanceof Class){
final Class<?> clazz = (Class<?>) targetType; final Class<?> clazz = (Class<?>) targetType;
if (JSONBeanParser.class.isAssignableFrom(clazz)){ if (JSONBeanParser.class.isAssignableFrom(clazz)){
@SuppressWarnings("rawtypes") final JSONBeanParser target = (JSONBeanParser) ReflectUtil.newInstanceIfPossible(clazz); @SuppressWarnings("rawtypes")
final JSONBeanParser target = (JSONBeanParser) ConstructorUtil.newInstanceIfPossible(clazz);
if(null == target){ if(null == target){
throw new ConvertException("Can not instance [{}]", targetType); throw new ConvertException("Can not instance [{}]", targetType);
} }

View File

@ -5,9 +5,9 @@ import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.bean.copier.ValueProvider; import cn.hutool.core.bean.copier.ValueProvider;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.getter.OptNullBasicTypeFromStringGetter; import cn.hutool.core.lang.getter.OptNullBasicTypeFromStringGetter;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.reflect.ConstructorUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.text.StrUtil; import cn.hutool.core.text.StrUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.log.Log; import cn.hutool.log.Log;
import cn.hutool.log.LogFactory; import cn.hutool.log.LogFactory;
@ -311,7 +311,7 @@ public abstract class AbsSetting implements OptNullBasicTypeFromStringGetter<Str
* @since 5.0.6 * @since 5.0.6
*/ */
public <T> T toBean(final String group, final Class<T> beanClass) { public <T> T toBean(final String group, final Class<T> beanClass) {
return toBean(group, ReflectUtil.newInstanceIfPossible(beanClass)); return toBean(group, ConstructorUtil.newInstanceIfPossible(beanClass));
} }
/** /**

View File

@ -2,8 +2,6 @@ package cn.hutool.setting.dialect;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.getter.BasicTypeGetter;
import cn.hutool.core.lang.getter.OptBasicTypeGetter;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.IoUtil;
@ -16,10 +14,12 @@ import cn.hutool.core.io.watch.SimpleWatcher;
import cn.hutool.core.io.watch.WatchMonitor; import cn.hutool.core.io.watch.WatchMonitor;
import cn.hutool.core.io.watch.WatchUtil; import cn.hutool.core.io.watch.WatchUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.getter.BasicTypeGetter;
import cn.hutool.core.lang.getter.OptBasicTypeGetter;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.reflect.ConstructorUtil;
import cn.hutool.core.reflect.ReflectUtil;
import cn.hutool.core.text.StrUtil; import cn.hutool.core.text.StrUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.log.StaticLog; import cn.hutool.log.StaticLog;
import java.io.BufferedReader; import java.io.BufferedReader;
@ -549,7 +549,7 @@ public final class Props extends Properties implements BasicTypeGetter<String>,
* @since 4.6.3 * @since 4.6.3
*/ */
public <T> T toBean(final Class<T> beanClass, final String prefix) { public <T> T toBean(final Class<T> beanClass, final String prefix) {
final T bean = ReflectUtil.newInstanceIfPossible(beanClass); final T bean = ConstructorUtil.newInstanceIfPossible(beanClass);
return fillBean(bean, prefix); return fillBean(bean, prefix);
} }