如此回答所述,查找模式必须包含私有访问才能被接受
LambdametaFactory。基本上,这意味着调用者
是
指定的类,因为它创建了特定的查找实例,或者查找类具有足够的信任关系,可以将查找对象传递给执行实际调用的代码(例如,在使用
invokedynamic指向时隐含到特定的引导方法)。
从Java 9开始,提供了一种
privateLookupIn(Class,MethodHandles.Lookup)尝试
private获取对另一个类具有访问权限的查找对象的方法。如文档所指定,将根据模块访问规则检查访问,即,必须“允许调用者对目标类进行
深入思考 ”。因此,就模块可访问性而言,仍然需要上述信任的存在。我想,这就是去框架的方法,其中框架管理的代码将向框架开放以支持这种访问。
如果那不可行,那么如果您是类加载器的创建者,则此答案包含一个替代方法。它使用类加载器的API注入一个新类,该类创建查找对象并允许创建者访问它。可以想象有多种变化,包括通过让合成类回调创建者的代码以移交查找对象来确保它的安全,而不是将其存储在每个人都可以阅读的字段中。



