引用匿名 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。您是否可以通过其他方式访问它是一种技术好奇心(我碰巧不知道答案),而不是您实际应该在生产中做的事情。
我正在为 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。您是否可以通过其他方式访问它是一种技术好奇心(我碰巧不知道答案),而不是您实际应该在生产中做的事情。