是否有一种向java.lang添加类的简单方法

时间:2013-08-02 13:50:49

标签: classloader java

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

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

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

编辑:我忘了提到我希望直接访问这些方法,而不是环绕路径绕道访问方法,如反射。目标是在运行时正常进行像Integer.getChars(int,index,chars)这样的调用 compile ,而且执行

2 个答案:

答案 0 :(得分:3)

您可以使用Java Reflections

执行此操作
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

答案 1 :(得分:3)

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