printLn 和反射

发布于 2024-12-09 02:22:22 字数 985 浏览 1 评论 0原文

我创建了一个简单的类

    (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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不一样的天空 2024-12-16 02:22:22

我想这可能是因为 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文