2010-07-28 16 views
8

En Java, ¿es posible acceder a una instancia de una clase estática (anidada) utilizando la reflexión?Java: obtenga una referencia a una clase estática utilizando la reflexión

Suponiendo que tengo las 2 clases siguientes definidas en el paquete de Package1.SubPackage.SubSubPackage :

public class MyMainClass { 
    public static class SalesObjectGrouper1 { 
     public static final GrouperContext CONTEXT = new GrouperContext("MyDate"); 
    } 

    private static class SalesObjectGrouper2 { 
     public static final GrouperContext CONTEXT = new GrouperContext("MyDate"); 
    } 
} 

Si funciono el siguiente código:

try { 
    xyz = Class.forName("Package1.SubPackage.SubSubPackage.MyMainClass.SalesObjectGrouper1"); 
} catch(ClassNotFoundException ex) { 
    // always hit the error 
} 

Será error que indica la clase no puede ser encontrado. Se puede hacer esto?

+0

btw utilizando Class.forName() no utiliza la reflexión. – stacker

Respuesta

16

has necesitado refiriéndose a la clase anidada como

MyMainClass$SalesObjectGrouper1 

clases anidadas se denominan internamente ContainingClassName $ NestedClassName

3

Para evitar cortes en el mapeo de clases de lenguaje Java a las clases de tiempo de ejecución de Java, podría usar Class.getDeclaredClasses. Usar la reflexión es a menudo un error. Tratar con clases anidadas no parece ser una buena señal.

Cuestiones relacionadas