Sugerencia: depurador de alguna manera sabe qué clases están donde. ¡Así que tú también puedes!
Intente utilizar javap
en este ejemplo con dos clases anónimas:
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);}};
}
}
Compilar y ejecutar 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
}
Como se puede ver, la primera clase tiene nombre Test$1
, el segundo - Test$2
. Hope tat ayuda.
Para obtener información más específica, descompile las clases específicas que le interesen, p. javap -c -l Test\$2
. Preste atención a los números de línea: le darán una pista sobre en qué parte del archivo fuente se definió la clase.