簡體   English   中英

有沒有一種簡單的方法可以將類添加到java.lang

[英]Is there a simple way to add a class to java.lang

有沒有一種簡單的方法可以將自己的類添加到java.lang(在桌面應用程序的上下文中,而不是applet / servlet的上下文中)。 這個想法是要訪問一些已經愚蠢地聲明為包私有的方法(例如Integer.getChars(...),而我不想復制所有這些代碼)。

當我的類加載時,只需在java.lang包中聲明一個類即可觸發SecurityException。

我知道我可以解壓縮rt.jar並在其中添加我的課程,但是我正在尋找不需要修改已安裝的JRE的方法。

編輯:我忘了提到我要直接訪問方法,而不是回旋繞道訪問方法,例如反射。 目標是進行像Integer.getChars(int,index,chars)這樣的調用,不僅可以編譯,而且可以在運行時正常執行

您可以使用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

通過使用非標准的“ -Xbootclasspath / p:”參數(Oracle VM),可以將類添加到受引導類加載器的SecurityManager保護的程序包中。 以這種方式添加的類是“受信任的”,並且由於它們在搜索順序上位於rt.jar 之前 ,因此也可以用來替換 JRE中定義的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM