我正在编写一个 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/