请描述基于MethodHandles.Lookup和LambdaMetafactory绑定反射的JDK 8快速构造字符串的方法,并给出相关代码片段。
基于MethodHandles.Lookup和LambdaMetafactory绑定反射的JDK 8快速构造字符串的方法,通过反射机制访问非公开的String(char[] value, boolean share)构造函数,从而避免不必要的数组拷贝。以下是相关代码片段:
public static BiFunction<char[], Boolean, String> getStringCreatorJDK8() throws Throwable {
Constructor<MethodHandles.Lookup> constructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class, int.class);
constructor.setAccessible(true);
MethodHandles.Lookup lookup = constructor.newInstance(String.class, -1); // Lookup.TRUSTED
MethodHandles.Lookup caller = lookup.in(String.class);
MethodHandle handle = caller.findConstructor(String.class, MethodType.methodType(void.class, char[].class, boolean.class));
CallSite callSite = LambdaMetafactory.metafactory(
caller,
"apply",
MethodType.methodType(BiFunction.class),
handle.type().generic(),
handle,
handle.type()
);
return (BiFunction<char[], Boolean, String>) callSite.getTarget().invokeExact();
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。