Byte buddy ByteBuddy与setAccessible的等价物是什么(true)?
我正在调用Byte buddy ByteBuddy与setAccessible的等价物是什么(true)?,byte-buddy,Byte Buddy,我正在调用MethodCall.invoke,并试图调用对象上不可访问的方法(该方法被声明为包私有) 如果我使用反射,我可以执行method.setAccessible(true)然后禁用访问检查 作为黑客,我知道MethodDescription继承了which定义。我重写它以返回true,只是为了看看会发生什么。毫不奇怪,我在方法调用时得到了一个IllegalAccessError。如果我重写,也会发生这种情况 我知道setAccessible(true)的魔力部分是通过以下方式实现的。我还
MethodCall.invoke
,并试图调用对象上不可访问的方法(该方法被声明为包私有)
如果我使用反射,我可以执行method.setAccessible(true)然后禁用访问检查
作为黑客,我知道MethodDescription
继承了which定义。我重写它以返回true
,只是为了看看会发生什么。毫不奇怪,我在方法调用时得到了一个IllegalAccessError
。如果我重写,也会发生这种情况
我知道setAccessible(true)
的魔力部分是通过以下方式实现的。我还知道这在jdk.internal.reflect
包中,默认情况下不会导出,如果您使用--release
和javac
,则无法导出,我就是
不管怎么说,我突然想到ByteBuddy可能有一些设施来帮助我
如何使用ByteBuddy实现这一点?这是不可能的,因为您不能合法地用字节码表示它。我还建议不要使用magic访问器,因为这在将来的Java版本中不再起作用,在这些版本中,这是使用
MethodHandle
s解决的。您可以解析方法句柄并从生成的类调用它。Ha;这将是我的下一个问题,因为我成功地解析了一个方法句柄,并将其存储在生成类的静态final
字段中……然后无论在哪里调用它,我都会得到一个错误的MethodTypeException
。