diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/func/LambdaFactory.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/func/LambdaFactory.java
index 3c91c412a..519288cf3 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/lang/func/LambdaFactory.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/func/LambdaFactory.java
@@ -16,8 +16,11 @@ import org.dromara.hutool.core.exceptions.UtilException;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.mutable.MutableEntry;
import org.dromara.hutool.core.map.WeakConcurrentMap;
-import org.dromara.hutool.core.reflect.*;
-import org.dromara.hutool.core.reflect.*;
+import org.dromara.hutool.core.reflect.MethodHandleUtil;
+import org.dromara.hutool.core.reflect.MethodUtil;
+import org.dromara.hutool.core.reflect.ModifierUtil;
+import org.dromara.hutool.core.reflect.ReflectUtil;
+import org.dromara.hutool.core.reflect.lookup.LookupUtil;
import java.io.Serializable;
import java.lang.invoke.*;
@@ -103,7 +106,7 @@ public class LambdaFactory {
final boolean isSerializable = Serializable.class.isAssignableFrom(functionInterfaceType);
final Method invokeMethod = abstractMethods.get(0);
- final MethodHandles.Lookup caller = LookupFactory.lookup(executable.getDeclaringClass());
+ final MethodHandles.Lookup caller = LookupUtil.lookup(executable.getDeclaringClass());
final String invokeName = invokeMethod.getName();
final MethodType invokedType = methodType(functionInterfaceType);
final MethodType samMethodType = methodType(invokeMethod.getReturnType(), invokeMethod.getParameterTypes());
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/LookupFactory.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/LookupFactory.java
deleted file mode 100644
index 95e255d39..000000000
--- a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/LookupFactory.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2023 looly(loolly@aliyun.com)
- * Hutool is licensed under Mulan PSL v2.
- * You can use this software according to the terms and conditions of the Mulan PSL v2.
- * You may obtain a copy of Mulan PSL v2 at:
- * http://license.coscl.org.cn/MulanPSL2
- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
- * See the Mulan PSL v2 for more details.
- */
-
-package org.dromara.hutool.core.reflect;
-
-import org.dromara.hutool.core.exceptions.UtilException;
-import org.dromara.hutool.core.lang.caller.CallerUtil;
-import org.dromara.hutool.core.util.JdkUtil;
-
-import java.lang.invoke.MethodHandles;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * {@link MethodHandles.Lookup}工厂,用于创建{@link MethodHandles.Lookup}对象
- * {@link MethodHandles.Lookup}是一个方法句柄查找对象,用于在指定类中查找符合给定方法名称、方法类型的方法句柄。
- *
- *
- * jdk8中如果直接调用{@link MethodHandles#lookup()}获取到的{@link MethodHandles.Lookup}在调用findSpecial和unreflectSpecial - * 时会出现权限不够问题,抛出"no private access for invokespecial"异常,因此针对JDK8及JDK9+分别封装lookup方法。 - *
- * - *- * 参考: - *
https://blog.csdn.net/u013202238/article/details/108687086
- * - * @author looly - * @since 5.7.7 - */ -public class LookupFactory { - - private static final int ALLOWED_MODES = MethodHandles.Lookup.PRIVATE | MethodHandles.Lookup.PROTECTED - | MethodHandles.Lookup.PACKAGE | MethodHandles.Lookup.PUBLIC; - - private static Method privateLookupInMethod; - private static Constructor
+ * 参考:https://blog.csdn.net/u013202238/article/details/108687086
+ *
+ * @author looly
+ * @since 6.0.0
+ */
+public class ConstructorLookupFactory implements LookupFactory {
+
+ private static final int ALLOWED_MODES = MethodHandles.Lookup.PRIVATE | MethodHandles.Lookup.PROTECTED
+ | MethodHandles.Lookup.PACKAGE | MethodHandles.Lookup.PUBLIC;
+
+ private final Constructor
+ * 参考:https://blog.csdn.net/u013202238/article/details/108687086
+ *
+ * jdk8中如果直接调用{@link MethodHandles#lookup()}获取到的{@link MethodHandles.Lookup}在调用findSpecial和unreflectSpecial
+ * 时会出现权限不够问题,抛出"no private access for invokespecial"异常,因此针对JDK8及JDK9+分别封装lookup方法。
+ *
+ * 参考:https://blog.csdn.net/u013202238/article/details/108687086
+ *
+ * @author looly
+ * @since 6.0.0
+ */
+public class LookupUtil {
+
+ private static final LookupFactory factory;
+
+ static {
+ if (JdkUtil.IS_JDK8) {
+ factory = new ConstructorLookupFactory();
+ } else {
+ factory = new MethodLookupFactory();
+ }
+ }
+
+ /**
+ * jdk8中如果直接调用{@link MethodHandles#lookup()}获取到的{@link MethodHandles.Lookup}在调用findSpecial和unreflectSpecial
+ * 时会出现权限不够问题,抛出"no private access for invokespecial"异常,因此针对JDK8及JDK9+分别封装lookup方法。
+ *
+ * @return {@link MethodHandles.Lookup}
+ */
+ public static MethodHandles.Lookup lookup() {
+ return lookup(CallerUtil.getCaller());
+ }
+
+ /**
+ * jdk8中如果直接调用{@link MethodHandles#lookup()}获取到的{@link MethodHandles.Lookup}在调用findSpecial和unreflectSpecial
+ * 时会出现权限不够问题,抛出"no private access for invokespecial"异常,因此针对JDK8及JDK9+分别封装lookup方法。
+ *
+ * @param callerClass 被调用的类或接口
+ * @return {@link MethodHandles.Lookup}
+ */
+ public static MethodHandles.Lookup lookup(final Class> callerClass) {
+ return factory.lookup(callerClass);
+ }
+}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/lookup/MethodLookupFactory.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/lookup/MethodLookupFactory.java
new file mode 100644
index 000000000..564c0c225
--- /dev/null
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/lookup/MethodLookupFactory.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2023 looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+package org.dromara.hutool.core.reflect.lookup;
+
+import org.dromara.hutool.core.exceptions.UtilException;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * jdk11中直接调用MethodHandles.lookup()获取到的MethodHandles.Lookup只能对接口类型才会权限获取方法的方法句柄MethodHandle。
+ * 如果是普通类型Class,需要使用jdk9开始提供的 MethodHandles#privateLookupIn(java.lang.Class, java.lang.invoke.MethodHandles.Lookup)方法.
+ *
+ * 参考:https://blog.csdn.net/u013202238/article/details/108687086
+ *
+ * @author looly
+ * @since 6.0.0
+ */
+public class MethodLookupFactory implements LookupFactory {
+
+ private final Method privateLookupInMethod;
+
+ /**
+ * 构造
+ */
+ public MethodLookupFactory() {
+ this.privateLookupInMethod = createJdk9PrivateLookupInMethod();
+ }
+
+ @Override
+ public MethodHandles.Lookup lookup(final Class> callerClass) {
+ try {
+ return (MethodHandles.Lookup) privateLookupInMethod.invoke(MethodHandles.class, callerClass, MethodHandles.lookup());
+ } catch (final IllegalAccessException | InvocationTargetException e) {
+ throw new UtilException(e);
+ }
+ }
+
+ @SuppressWarnings("JavaReflectionMemberAccess")
+ private static Method createJdk9PrivateLookupInMethod() {
+ try {
+ return MethodHandles.class.getMethod("privateLookupIn", Class.class, MethodHandles.Lookup.class);
+ } catch (final NoSuchMethodException e) {
+ //可能是jdk9 以下版本
+ throw new IllegalStateException(
+ "There is no 'privateLookupIn(Class, Lookup)' method in java.lang.invoke.MethodHandles.", e);
+ }
+ }
+}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/lookup/package-info.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/lookup/package-info.java
new file mode 100644
index 000000000..c96400540
--- /dev/null
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/lookup/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2023 looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+/**
+ * {@link java.lang.invoke.MethodHandles.Lookup} 创建封装
+ * jdk8中如果直接调用{@link java.lang.invoke.MethodHandles#lookup()}获取到的{@link java.lang.invoke.MethodHandles.Lookup}在调用findSpecial和unreflectSpecial
+ * 时会出现权限不够问题,抛出"no private access for invokespecial"异常,因此针对JDK8及JDK9+分别封装lookup方法。
+ *
+ * 参考:
+ *
+ * {@link MethodHandles.Lookup}是一个方法句柄查找对象,用于在指定类中查找符合给定方法名称、方法类型的方法句柄。
+ *
+ *
+ * {@link MethodHandles.Lookup}是一个方法句柄查找对象,用于在指定类中查找符合给定方法名称、方法类型的方法句柄。
+ *
+ *
+ *