2010-07-28 4 views
8

En Java, est-il possible d'accéder à une instance d'une classe statique (imbriquée) en utilisant la réflexion?Java - Obtenir une référence à une classe statique en utilisant la réflexion

Supposant J'ai les 2 classes suivantes définies dans le package 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 je lance le code suivant:

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

ce sera la classe d'erreur indiquant ne peut pas être trouvé. Cela peut-il être fait?

+0

btw utilisant Class.forName() n'utilise pas de réflexion. – stacker

Répondre

16

Avez-vous essayé référant à la classe imbriquée comme

MyMainClass$SalesObjectGrouper1 

Les classes imbriquées sont en interne nommés ContainingClassName $ NestedClassName

3

Pour éviter hacks dans la mise en correspondance des classes de langage Java sur les classes d'exécution Java, vous pourrait utiliser Class.getDeclaredClasses. L'utilisation de la réflexion est souvent une erreur. Traiter des classes imbriquées ne semble pas être un bon signe.

Questions connexes