私はかなり簡単なはずのことをしようとしていますが、失敗し続けている方法もあります...
アイデアは、既存の Java クラスを Java リポジトリ (この場合は Java Sun) から取得し、少し変更することです。クラスを再コンパイルし、変更したクラスをプロジェクトで使用します。
手順 (たとえば、java.lang から String.java を取得しました)
以下を追加して String String.java を変更します。
public int zzz() { return 123; }
クラスコンストラクターのすぐ下。
String.java を再コンパイルする
javac -d String String.java
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
短いメインクラスを書く:
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.メインを実行
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倍。