java - 将用户创建的类标记为 "plugins"

标签 java api interface

我正在编写一个 API,它将帮助其他人为我当前的程序编写自定义“插件”类。

这些插件类可以采用三种可能的形式。

  • 扩展 JPanel
  • 实现可绘制
  • 以上的组合

Paintable 接口(interface)只是一种方法:paint(Graphics2D g)。 然后我将创建这些加载的类的新实例。如果发现该对象是 JPanel(通过 instanceof),则在 JFrame 上创建一个新按钮并让它打开此 JPanel。 如果发现该对象是 Paintable,则将其添加到 ArrayList。

但是,有一个问题。我将使用 URLClassLoader 从不同的文件夹加载这些类。在此文件夹中,将存在扩展 JPanel 的类,这些类不是意味着是插件,因此不意味着被加载。

所以我的问题是:提示用户将其类“标记”为插件的最佳方式是什么?他们将如何“标记”它?

请记住这些插件可能显示的三种可能性。简单地创建一个名为 Plugin 的空类来扩展 JPanel 并将其扩展到所有插件对于那些扩展 JPanel 的人来说似乎很浪费。

最佳答案

为要用作插件的类创建注释,例如像这样的东西:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyPlugin {

}

,让用户使用此注释来注释插件,并检查一个类是否应该是这样的插件:

boolean isPlugin(Class<?> cl) {
    return cl.getAnnotation(MyPlugin.class) != null;
}

关于java - 将用户创建的类标记为 "plugins",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24969246/

相关文章:

java - 在 Java 中创建对象数组时遇到问题

api - 如何从 ID 创建 Foursquare 个人资料网址?

api - 下载时使用哪种 REST 方法

database - CouchDB 和 Amazon S3 的通用接口(interface)

java - 无法让 ACRA 接受自签名证书

java - 按计划运行所有派生 DAO 类的公共(public)查询

java - 泛型和 Class.forName

web-services - DELETE 和 PUT 请求的 Mod_security 问题?

java - 作业帮助、抽象/接口(interface)类

c# - 解决多接口(interface)实现