Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java - Get reference to a static class using reflection

In Java, is it possible to access an instance of a static class (nested) using reflection?

Supposing I have the following 2 classes defined in the 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");  
   }  
}  

If I run the following code:

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

it will error indicating class cannot be found. Can this be done?

like image 472
Andez Avatar asked Jul 28 '10 21:07

Andez


2 Answers

Have you tried referring to the nested class as

MyMainClass$SalesObjectGrouper1

Nested classes are internally named ContainingClassName$NestedClassName

like image 92
Jim Garrison Avatar answered Oct 13 '22 13:10

Jim Garrison


To avoid hacks in the mapping of Java language classes on to the Java runtime classes, you could use Class.getDeclaredClasses. Using reflection is often a mistake. Dealing with nested classes does not seem to be a good sign.

like image 24
Tom Hawtin - tackline Avatar answered Oct 13 '22 13:10

Tom Hawtin - tackline