Search code examples
javaclassrcp

Reference an anonymous class?


I am developing a plugin for an RCP application. Within the plugin.xml, I need to register certain classes at a given extension point. One of these classes is an anonymous (?) class defined like this:

package de.me.mypackage;

import org.something.AnotherClass;

public class ClassOne {
  ...
  public static AnotherClass<ClassOne> getThat() {
    return new AnotherClass<ClassOne>() {
      ...
    };
  }

}

Is there any way to reference AnotherClass<ClassOne> within the plugin.xml?

I already tried something like de.me.mypackage.ClassOne$AnotherClass but that does not work. Do I have to declare that class within its own file to be able to reference it?


Solution

  • As far as I know, it would have a numeric index:

    class Bla {
      public static void main(String[] args) {
        (new Runnable() {
          public void run() {
            System.out.println(getClass().getName()); // prints Bla$1
          }
        }).run();
      }
    }
    

    After compiling, you get:

    $ ls *.class
    Bla$1.class Bla.class
    

    That said, you can't rely on the numbering in case the source file is modified.

    Can you instead define a static inner class, like:

    public class ClassOne {
    
      public static class MyClass extends AnotherClass<ClassOne> {
        public MyClass(/* arguments you would pass in getThat()? */) {
          ...
        }
        ...
      }
    
      public static AnotherClass<ClassOne> getThat() {
        return new MyClass(...);
      }
    }