mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-24 18:04:54 +08:00
fix code
This commit is contained in:
parent
46225d8af3
commit
db96c981e3
@ -1,6 +1,7 @@
|
||||
package cn.hutool.core.lang.func;
|
||||
|
||||
import cn.hutool.core.reflect.ConstructorUtil;
|
||||
import cn.hutool.core.util.JdkUtil;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.function.BiFunction;
|
||||
@ -23,7 +24,7 @@ public class FunctionPool {
|
||||
|
||||
static {
|
||||
final Constructor<String> constructor = ConstructorUtil.getConstructor(String.class, char[].class, boolean.class);
|
||||
STRING_CREATOR_JDK8 = LambdaFactory.build(BiFunction.class, constructor);
|
||||
STRING_CREATOR_JDK8 = JdkUtil.IS_JDK8 ? LambdaFactory.build(BiFunction.class, constructor) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -34,6 +35,11 @@ public class FunctionPool {
|
||||
* @return String
|
||||
*/
|
||||
public static String createString(final char[] value) {
|
||||
return STRING_CREATOR_JDK8.apply(value, true);
|
||||
if(JdkUtil.IS_JDK8){
|
||||
return STRING_CREATOR_JDK8.apply(value, true);
|
||||
} else {
|
||||
// TODO JDK9+优化
|
||||
return new String(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ import static java.lang.invoke.MethodType.methodType;
|
||||
|
||||
/**
|
||||
* 以类似反射的方式动态创建Lambda,在性能上有一定优势,同时避免每次调用Lambda时创建匿名内部类
|
||||
* TODO JDK9+存在兼容问题
|
||||
*
|
||||
* @author nasodaengineer
|
||||
*/
|
||||
@ -60,7 +61,8 @@ public class LambdaFactory {
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建Lambda
|
||||
* 根据提供的方法或构造对象,构建对应的Lambda函数<br>
|
||||
* 调用函数相当于执行对应的方法或构造
|
||||
*
|
||||
* @param functionInterfaceType 接受Lambda的函数式接口类型
|
||||
* @param executable 方法对象,支持构造器
|
||||
|
@ -1,14 +1,16 @@
|
||||
package cn.hutool.core.reflect;
|
||||
|
||||
import java.lang.reflect.*;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
|
||||
/**
|
||||
* 反射工具类
|
||||
*
|
||||
* <p>
|
||||
* 本工具类,v6.x进行了重构,原来{@link ReflectUtil}中的方法大部分被移动到了
|
||||
* {@link FieldUtil}、{@link MethodUtil}、{@link ModifierUtil}、{@link ConstructorUtil}等中,
|
||||
* 其他相关方法请参考<strong>cn.hutool.core.reflect</strong>包下的类,相关类
|
||||
* 本工具类,v6.x进行了重构,原来{@link ReflectUtil}中的方法大部分被移动到了
|
||||
* {@link FieldUtil}、{@link MethodUtil}、{@link ModifierUtil}、{@link ConstructorUtil}等中,
|
||||
* 其他相关方法请参考<strong>cn.hutool.core.reflect</strong>包下的类,相关类
|
||||
* </p>
|
||||
* <p>常用方法变更</p>
|
||||
* <ul>
|
||||
@ -20,23 +22,28 @@ import java.lang.reflect.*;
|
||||
* <li>{@code ReflectUtil.removeFinalModify(Field)} --p {@link ModifierUtil#removeFinalModify(Field)}</li>
|
||||
* </ul>
|
||||
*
|
||||
*
|
||||
* @author Looly
|
||||
* @since 3.0.9
|
||||
*/
|
||||
public class ReflectUtil {
|
||||
|
||||
/**
|
||||
* 设置方法为可访问(私有方法可以被外部调用)
|
||||
* 设置方法为可访问(私有方法可以被外部调用)<br>
|
||||
* 注意此方法在jdk9+中抛出异常,须添加`--add-opens=java.base/java.lang=ALL-UNNAMED`启动参数
|
||||
*
|
||||
* @param <T> AccessibleObject的子类,比如Class、Method、Field等
|
||||
* @param accessibleObject 可设置访问权限的对象,比如Class、Method、Field等
|
||||
* @return 被设置可访问的对象
|
||||
* @throws SecurityException 访问被禁止抛出此异常
|
||||
* @since 4.6.8
|
||||
*/
|
||||
public static <T extends AccessibleObject> T setAccessible(final T accessibleObject) {
|
||||
public static <T extends AccessibleObject> T setAccessible(final T accessibleObject) throws SecurityException {
|
||||
if (null != accessibleObject && false == accessibleObject.isAccessible()) {
|
||||
accessibleObject.setAccessible(true);
|
||||
return AccessController.doPrivileged((PrivilegedAction<T>) () -> {
|
||||
// 特权访问
|
||||
accessibleObject.setAccessible(true);
|
||||
return accessibleObject;
|
||||
});
|
||||
}
|
||||
return accessibleObject;
|
||||
}
|
||||
|
@ -23,10 +23,6 @@ public class JdkUtil {
|
||||
*/
|
||||
public static final boolean IS_AT_LEAST_JDK17;
|
||||
|
||||
/**
|
||||
* 是否GraalVM环境
|
||||
*/
|
||||
public static final boolean IS_GRAAL;
|
||||
/**
|
||||
* 是否Android环境
|
||||
*/
|
||||
@ -40,7 +36,6 @@ public class JdkUtil {
|
||||
|
||||
// JVM名称
|
||||
final String jvmName = _getJvmName();
|
||||
IS_GRAAL = jvmName.equals("Substrate VM");
|
||||
IS_ANDROID = jvmName.equals("Dalvik");
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
package cn.hutool.core.util;
|
||||
|
||||
import cn.hutool.core.lang.Console;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
public class JdkUtilTest {
|
||||
@ -9,4 +11,10 @@ public class JdkUtilTest {
|
||||
final int jvmVersion = JdkUtil.JVM_VERSION;
|
||||
Assert.assertTrue(jvmVersion >= 8);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void getJvmNameTest() {
|
||||
Console.log(JdkUtil.IS_AT_LEAST_JDK17);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user