引用匿名 class?

Reference an anonymous class?

我正在为 RCP 应用程序开发插件。 在 plugin.xml 中,我需要在给定的扩展点注册某些 classes。 其中一个 classes 是一个匿名的 (?) class 定义如下:

package de.me.mypackage;

import org.something.AnotherClass;

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

}

有没有办法在 plugin.xml 中引用 AnotherClass<ClassOne>

我已经尝试过 de.me.mypackage.ClassOne$AnotherClass 之类的方法,但它不起作用。我是否必须在其自己的文件中声明 class 才能引用它?

美元符号仅在 class 的 二进制名称 中起作用;在 Java 源中,只需使用 de.me.mypackage.ClassOne.AnotherClass.class.

据我所知,它会有一个数字索引:

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

编译后得到:

$ ls *.class
Bla.class Bla.class

也就是说,您不能依赖编号以防源文件被修改。

您能否改为定义一个 static 内部 class,例如:

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(...);
  }
}

我需要在这里明确说明 - 如果您想引用它,您应该 将其命名为 class。您是否可以通过其他方式访问它是一种技术好奇心(我碰巧不知道答案),而不是您实际应该在生产中做的事情。