2011-12-20 11 views
6

Estoy perfilando una aplicación Java, y la mayor cantidad de objetos asignados tiene el nombre com.x.y.ClassName$5.¿Qué significa dólar seguido de un índice en un nombre de clase?

Tanto el profiler de netbeans como el kit de tk utilizan la misma convención de nomenclatura. No entiendo cómo googlear el problema de nombres.

¿Qué es $5 después del nombre de la clase?

EDIT: Parece que los $ 5 es la quinta clase anónima declarada. He usado javap en la clase generada para encontrar cuál es la quinta clase anónima. Referencia encuentra en How to match compiled class name to an enum member in Java?

Respuesta

19

com.x.y.ClassName $ 5 significa "la quinta clase interna anónima en com.x.y.ClassName"

+0

Wow, respuesta rápida. ¿Hay alguna manera de saber qué clase interna es la quinta? – bbaja42

+0

No tengo conocimiento de ninguna forma de hacerlo. Entonces no estoy contento con mi propia respuesta. Decir "quinto" sin decir el orden específico es como decir "un número aleatorio". Sin embargo, si tiene un buen descompilador como [JD] (http://java.decompiler.free.fr/) puede mostrarle el código de cualquier clase interna –

+1

, creo que es el orden en que se declaran. De todos modos, puede sobrescribir toString() para proporcionar una representación significativa en el depurador. – fortran

1

Algunos links para ayudarle. También se fijan en polygenelubricant's respuesta

se obtiene com.x.y.ClassName $ 5. cuando su clase contiene un anonyomous clase interna

sample8.class 
    sample8$1.class 
    sample8$2.class 
    sample8$klass.class 
    sample8$klass$1.class 

Ejemplo

public class sample8 { 


     private class klass{ 
      void vodka() { 
       sample8 _s = new sample8() { 

       }; 

      } 
     } 
     sample8() { 
       klass _k = new klass(); 
       _k.vodka(); 
      } 


    public static void main(String args[]) 
    { 
    } 

    sample8 _s = new sample8() { 

    }; 

    sample8 _s1 = new sample8() { 

    }; 
} 
+1

AFAIK que daría como resultado ClassName $ klass, no en ClassName $

+0

gracias Marque su derecha. Si hay una clase interna anónima, crea una. –

Cuestiones relacionadas