|
@@ -16,6 +16,8 @@
|
|
|
*/
|
|
|
package com.baomidou.mybatisplus.core.toolkit;
|
|
|
|
|
|
+import java.lang.reflect.Constructor;
|
|
|
+import java.lang.reflect.InvocationTargetException;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
|
|
@@ -23,6 +25,7 @@ import java.util.List;
|
|
|
* ClassUtils
|
|
|
*
|
|
|
* @author Caratacus
|
|
|
+ * @author HCL
|
|
|
* @since 2017/07/08
|
|
|
*/
|
|
|
public final class ClassUtils {
|
|
@@ -79,4 +82,23 @@ public final class ClassUtils {
|
|
|
return getUserClass(object.getClass());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据指定的 class , 实例化一个对象,根据构造参数来实例化
|
|
|
+ * <p>
|
|
|
+ * 在 java9 及其之后的版本 Class.newInstance() 方法已被废弃
|
|
|
+ *
|
|
|
+ * @param clazz 需要实例化的对象
|
|
|
+ * @param <T> 类型,由输入类型决定
|
|
|
+ * @return 返回新的实例
|
|
|
+ */
|
|
|
+ public static <T> T newInstance(Class<T> clazz) {
|
|
|
+ try {
|
|
|
+ Constructor<T> constructor = clazz.getDeclaredConstructor();
|
|
|
+ constructor.setAccessible(true);
|
|
|
+ return constructor.newInstance();
|
|
|
+ } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
|
|
|
+ throw ExceptionUtils.mpe("实例化对象时出现错误,请尝试给 " + clazz.getName() + "添加无参的构造方法", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|