Re: load module Michael Neumann (neumann@s-direktnet.de)
Sun, 11 Jun 2000 19:52:57 +0200

Hi!

Mark S. Miller wrote:
> At 12:44 AM 6/10/00 , Michael Neumann wrote:
> >Another question:
> >How can I create an instance (or access static's) of an inner class?
> >
> >Example:
> >
> >public class A {
> > static class B {
> > }
> >}
> >
> >Here I want to get an instance of A.B .
>
> Not implemented yet, sorry. On VisualCafe 3.0c using Java 1.1.7a both
> Class.getClasses() and Class.getDeclaredClasses() returns an empty list on
> your example, even when I declare B to be "static public". Is this a Java
> bug? In order to implement this feature, I need some way of accessing an
> Inner Class object from dynamic knowledge of its name. These two methods
of
> Class are the only ways I know of doing so, and I don't know how to make
> them work. Anyone?

With JDK 1.2.2 this works fine.
I wrote following example to demonstrate this:

import java.lang.reflect.*;

class Outer {

public static class Inner {

      public Inner() {}
      void test() { System.out.println("Inner::test()"); }
}
}

public class Test {

public static void main(String args[]) {

Outer outer = new Outer();

      Class inner_class = outer.getClass().getClasses()[0];
      Constructor cons[] = inner_class.getConstructors();

      try {

         Outer.Inner inner = (Outer.Inner) cons[0].newInstance(new
Object[0]);
         inner.test();        // prints "Inner::test()"
      }
      catch(java.lang.IllegalAccessException e) {}
      catch(java.lang.InstantiationException e) {}
      catch(java.lang.reflect.InvocationTargetException e) {}

}
}


Regards
Michael