1

有没有一种简单的方法可以将我自己的类添加到 java.lang(在桌面应用程序的上下文中,而不是 applet/servlet)。这个想法是访问一些被愚蠢地声明为包私有的方法(例如 Integer.getChars(...),我不想复制所有这些代码)。

当我的类加载时,只需在 java.lang 包中声明一个类就会触发 SecurityException。

我知道我可以解压缩 rt.jar 并在那里添加我的类,但我正在寻找一种不需要修改已安装 JRE 的方法。

编辑:我忘了提到我想要直接访问这些方法,而不是像反射这样的迂回迂回访问方法。目标是进行像 Integer.getChars(int, index, chars) 这样的调用,不仅可以编译,而且可以在运行时正常执行

4

2 回答 2

3

您可以使用Java 反射来做到这一点

Class<Integer> clazz = Integer.class;
Method m = clazz.getDeclaredMethod("getChars", int.class, int.class, char[].class);
m.setAccessible(true);
m.invoke(new Integer(1), 0, 0, new char[] {'1'});
// OR
//m.invoke(null , 0, 0, new char[] {'1'}); since getChars method is static and doesn't require an instance
于 2013-08-02T14:03:03.120 回答
3

可以使用非标准的“-Xbootclasspath/p:”参数(Oracle VM)将类添加到受引导类加载器的 SecurityManager 保护的包中。以这种方式添加的类是“受信任的”,并且由于它们在搜索顺序方面位于rt.jar之前,因此也可以用来替换JRE 中定义的类。

于 2013-08-05T14:29:49.467 回答