1
我的应用程序允许开发人员创建一些插件。根据基本抽象类确定的要求。每个插件必须有一个名称。我想通过使用注释来解决这个问题。所以,我定义我自己的批注名称如下:反射读取命名类的注释
@Retention(RetentionPolicy.RUNTIME)
public @interface Name {
public String value();
}
我把这个annotaion和基础抽象类CommonPlugin成单独的模块,并打造为JAR文件与开发商分享。
然后我导入包,并把这个注释我的defenition之前测试插件如下:
@Name("Test plugin")
public class TestPlugin extends CommonPlugin {
然后我反映过URLClassLoader
所有给出的插件并不能找到在TestPlugin类注释必要。但是如果我将Name注释定义到TestPlugin类的相同包中,我可以找到它。它应该是这样还是我做错了什么?
这听起来不像它应该是这样。您的软件包和导入是否以这样一种方式设置,即未经认证的名称“Name”在所有来源中指的是相同的合格名称?您可以使用'javap'来查看类中存储了哪些注释,以查看问题出在创建还是加载该'TestPlugin'类。 – MvG 2012-08-02 10:30:45
是的,我已将注释名称更改为PluginName,问题已解决。可能,名称'名字'不是最好的选择。谢谢。 – Zharro 2012-08-02 11:25:00