2010-07-28 16 views
8

Czy w Javie można uzyskać dostęp do instancji klasy statycznej (zagnieżdżonej) za pomocą odbicia?Java - Uzyskaj odniesienie do klasy statycznej za pomocą refleksji

Przypuśćmy mam następujące 2 klas zdefiniowanych w pakiet 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"); 
    } 
} 

Jeśli uruchomić następujący kod:

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

będzie to błąd wskazujący klasa nie może być znalezionym. Czy można to zrobić?

+0

btw przy użyciu Class.forName() nie używa refleksji. – stacker

Odpowiedz

16

Czy próbowali odnosząc się do zagnieżdżonych klasy jako

MyMainClass$SalesObjectGrouper1 

Klasy zagnieżdżone są wewnętrznie nazwie ContainingClassName $ NestedClassName

3

Aby uniknąć hacki w mapowaniu klas języka Java do klas Javy, ty może użyć Class.getDeclaredClasses. Korzystanie z refleksji często jest błędem. Radzenie sobie z klasami zagnieżdżonymi nie wydaje się dobrym znakiem.

Powiązane problemy