2010-07-28 20 views
8

In Java, è possibile accedere a un'istanza di una classe statica (nidificata) utilizzando la riflessione?Java - Ottieni riferimento a una classe statica mediante la riflessione

Supponendo Ho le seguenti 2 classi definite nel pacchetto 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"); 
    } 
} 

Se si esegue il codice seguente:

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

che verrà errore indicante classe non può Essere trovato. Può essere fatto?

+0

btw utilizzando Class.forName() non utilizza la riflessione. – stacker

risposta

16

avete provato riferendosi alla classe annidata come

MyMainClass$SalesObjectGrouper1 

classi annidate sono chiamati internamente ContainingClassName $ NestedClassName

3

Per evitare hack nella mappatura dei corsi di lingua Java su alle classi di runtime Java, è potrebbe usare Class.getDeclaredClasses. Usare la riflessione è spesso un errore. Trattare con classi annidate non sembra essere un buon segno.

Problemi correlati