Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Byte buddy ByteBuddy与setAccessible的等价物是什么(true)?_Byte Buddy - Fatal编程技术网

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