开发者社区> 问答> 正文

绑定反射的JDK 8快速构造字符串的方法,并给出相关代码片段。

请描述基于MethodHandles.Lookup和LambdaMetafactory绑定反射的JDK 8快速构造字符串的方法,并给出相关代码片段。

展开
收起
花开富贵111 2024-08-19 10:11:38 18 0
1 条回答
写回答
取消 提交回答
  • 基于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(); 
    }
    
    2024-08-19 15:51:46
    赞同 2 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载