引用一个匿名类?

时间:2015-12-29 15:03:02

标签: java class rcp

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

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的内容,但这不起作用。我是否必须在自己的文件中声明该类才能引用它?

3 个答案:

答案 0 :(得分:2)

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

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

编译完成后,您将获得:

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

也就是说,如果源文件被修改,你不能依赖编号。

您可以改为定义static内部类,例如:

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

答案 1 :(得分:1)

我需要在这里说明显 - 如果你想引用它,你应该使它成为一个命名类。你是否可以访问它是一种技术上的好奇心(我不会碰巧知道答案),而不是你应该在生产中实际做的事情。

答案 2 :(得分:0)

美元符号仅在班级二进制名称中发挥作用;在Java源代码中,只需使用de.me.mypackage.ClassOne.AnotherClass.class