如何劫持String.class

时间:2011-03-21 23:55:33

标签: java

所以基本上我只是想通过尝试一种新方法来调试几个简单的脚本,过去通过挂钩URL.class(使用jdk中的源代码并重新编译)我已经成功了,但是我意识到如何我可以打印出一个字符串,甚至是一个字符串吗?

我希望能够写入或打印出任何通过字符串类的字符串,但是当我在字符串类本身时,如何创建管道方法?

即。一个char数组被传递到字符串中,我如何获取它,使它成为一个字符串并将其发送到字符串类中的print out命令?如果我太模糊,我会提供一些例子。

2 个答案:

答案 0 :(得分:2)

IMO,调整Java标准类的实现是一个非常糟糕的主意,即使你只是尝试调试一些东西。问题是你可以把事情搞得很糟糕。

例如,@ Roflcoptr建议您为每个System.out.println(...)构造函数添加String。但是如果PrintStream.println调用由于某种原因试图构造String会发生什么?如果在初始化System.*流对象之前有什么东西试图构造一个String,那么在JVM引导期间会发生什么?

我不是说它不起作用。我不是说你不能让它发挥作用。我说这样的hackery可能会以惊人而可怕的方式失败。

我的建议是找到另一种调试/诊断问题的方法。例如,在相关的String构造函数上设置断点。

答案 1 :(得分:1)

从JDK源重新编译的替代方法可能是使用aspect-oriented programming,它允许您向以前编译的类添加或替换行为。 AspectJ是支持面向方面的Java编程的一种工具。