ヒント:どのクラスがどこにあるのか、デバッガは何とか知っています。だからあなたもできる!
は2つの匿名クラスで、この例でjavap
を使用してみてください:
import java.util.*;
public class Test {
public static void main(String [] args) {
Map m = new HashMap(){{System.out.print(1);}};
Map m1 = new HashMap(){{System.out.print(2);}};
}
}
は、それをコンパイルしを実行します。
$ javap -c -l Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 3: 0
public static void main(java.lang.String[]);
Code:
0: new #2; //class Test$1
3: dup
4: invokespecial #3; //Method Test$1."<init>":()V
7: astore_1
8: new #4; //class Test$2
11: dup
12: invokespecial #5; //Method Test$2."<init>":()V
15: astore_2
16: return
LineNumberTable:
line 5: 0
line 7: 8
line 9: 16
}
あなたが見ることができるように、最初のクラスは、二番目の名前Test$1
を得ました - Test$2
。希望はタトが助けます。
詳細については、興味のあるクラスを逆コンパイルしてください。 javap -c -l Test\$2
。行番号に注意してください:ソースファイル内のどこにクラスが定義されているかのヒントを提供します。
出典
2011-10-18 00:51:47
alf