簡體   English   中英

將方法添加到現有java類並使用我的項目重新編譯

[英]adding methods to existing java class and recompile with my project

我正在嘗試做一些應該很容易的事情,但有些事情我會繼續失敗......

我的想法是從java存儲庫中獲取現有的java類(在我們的例子中是java sun)稍微修改一下..重新編譯類並在我們的項目中使用修改后的類

步驟(我從java.lang中獲取了String.java)

  1. 通過添加以下命令修改String String.java:

     public int zzz() { return 123; } 

    就在類構造函數下面。

  2. 重新編譯String.java

     javac -d String String.java 
  3. jar -cf編譯的文件這是結果:jar -vtf String.jar:

      0 Wed May 22 10:31:06 IDT 2013 META-INF/ 68 Wed May 22 10:31:06 IDT 2013 META-INF/MANIFEST.MF 9763 Wed May 22 10:30:44 IDT 2013 java/lang/String$1.class 1232 Wed May 22 10:26:04 IDT 2013 java/lang/String$CaseInsensitiveComparator.class 17269 Wed May 22 10:26:04 IDT 2013 java/lang/String.class 
  4. 寫短主要課:

      public class main { /** * @param args */ public static void main(java.lang.String[] args) { // TODO Auto-generated method stub java.lang.String s = new java.lang.String(" xxx "); s = s.concat("bla bla"); System.out.println(s); System.out.println(s.zzz()); } } 

(我在嘗試java.lang.String和String時會遇到相同的行為。)

5.使用修改后的String類編譯我的main.java

    javac -Xbootclasspath/p:String.jar main.java

6.run主要

java -Xbootclasspath/p:String.jar main

這給了我們以下輸出:

myusername@machinename:~/work/sand_box$ java -Xbootclasspath/p:String.jar main
 xxx bla bla
Exception in thread "main" java.lang.NoSuchMethodError: java.lang.String.<init>([CZ)V
    at java.lang.Integer.toString(Integer.java:333)
    at java.lang.Integer.toString(Integer.java:136)
    at java.lang.String.valueOf(String.java:2948)
    at java.io.PrintStream.print(PrintStream.java:597)
    at java.io.PrintStream.println(PrintStream.java:736)
    at main.main(main.java:12)

我無法弄清楚我做錯了什么可以有人請說清楚這個嗎?

10倍於所有貢獻者。


從我的角度來看,最好只擴展String而不是重新編譯JDK類的修改版本
例如: public class String extends java.lang.String
這樣你就可以在包中創建一個新的String
當然,根據您的需要,這可能不是最好的選擇
但總的來說,我認為直接修改JDK類並不是一個好主意 - 至少如果你不打算自己包含(並重新編譯)源代碼中的所有SDK

KR
弗洛里安

暫無
暫無

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

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