Podpowiedź: debugger jakoś wie, które klasy są gdzie. Więc możesz też!
Spróbuj użyć javap
na tym przykładzie z dwóch klas anonimowych:
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);}};
}
}
skompilować i uruchomić javap -c -l
:
$ 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
}
Jak widać, pierwsza klasa dostał imię Test$1
, drugi - Test$2
. Nadzieja tat pomaga.
Aby uzyskać bardziej szczegółowe informacje, należy dekompilować konkretne zajęcia, które Cię interesują, np. javap -c -l Test\$2
. Zwróć uwagę na numery linii: podadzą ci wskazówkę, gdzie w pliku źródłowym została zdefiniowana klasa.