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