printLn 和反射
我创建了一个简单的类
(1) public class Inspector implements ClassFileTransformer{
(2) public byte[] transform(ClassLoader loader,
String className, Class<?> clazz,
(3) ProtectionDomain domain, byte[] bytes)
(4) throws IllegalClassFormatException {
(5) // clazz.getName();
(6) System.out.println("in Transform");
(7) return bytes;
}
public static void premain(String agentArgument,
Instrumentation instrumentation) {
System.out.println("in premain");
instrumentation.addTransformer(new Inspector());
}
<块引用>输出:在 premain \n 中 Transform
然后,如果我取消注释行号 (5),则无法获取此行之后的所有 println
:
<块引用>输出:在 premain 中 \n
,当我使用 Class 类中的每个方法时,它是相同的...
有什么想法吗?
I created a simple class
(1) public class Inspector implements ClassFileTransformer{
(2) public byte[] transform(ClassLoader loader,
String className, Class<?> clazz,
(3) ProtectionDomain domain, byte[] bytes)
(4) throws IllegalClassFormatException {
(5) // clazz.getName();
(6) System.out.println("in Transform");
(7) return bytes;
}
public static void premain(String agentArgument,
Instrumentation instrumentation) {
System.out.println("in premain");
instrumentation.addTransformer(new Inspector());
}
Output: in premain \n in Transform
Then if I uncomment the line number (5), I can't get all my println
after this line:
Output: in premain \n
and it is the same when I use every methods from the class Class...
Any idea?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我想这可能是因为 clazz 为空。它仅用于类重新定义或重新转换。
你的transform()方法可能会抛出一个NPE,它与返回null具有相同的效果,这意味着不执行任何转换。
I think it might be because clazz is null. It is only provided for class redefine or retransform.
Your transform() method probably throws a NPE, which has the same effect as returning null, meaning no transformation is performed.