Java10中应该使用什么代替`defineClass`?

6

我使用ClassLoader中的defineClass()方法来根据字节数组定义一个类。我使用反射获取该方法:

ClassLoader.class.getDeclaredMethod(
    "defineClass", String.class, byte[].class, int.class, int.class);

Java10对defineClass的反射使用进行了投诉。

我应该使用什么代替?


9
Lookup.defineClass() - Brian Goetz
1个回答

6

MethodHandles.Lookup.defineClass 似乎是一个可靠的替代方案。然而,需要注意的是,您定义的类必须与查找的查找类在同一运行时包中。您将无法创建其他模块中存在的包中的类,这是之前的方法所没有的限制。根据您的使用情况,这些问题可能会或可能不会出现。

如果您想深入了解该主题,Rafael Winterhalter 在他的博客上对新的限制进行了讨论并结合 Byte Buddy 展开了相关工作。如果您足够了解任意运行时类定义的相关问题,这可能会对您感兴趣。


4
如果您能详细说明一下,“请注意,它比要替换的方法强制执行更严格的可见性规则”,那将非常好。 - Naman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接