我们创建了一个构建逻辑电路的程序,并使用NetBeans 平台的Lookup和ServiceProvider机制将所有可用的逻辑元素放到 UI 面板上。
模型(MVC)有一个 BasicElement 类,它是所有元素的 ServiceProvider。这个类是公共的,它的包是公共导出的,并且 View 模块依赖于它。View 模块只知道这个 Model 模块。当有人使用带有 @ServiceProvider注释的一组元素添加新模块时,View 会将带有 Lookup 元素的新找到的元素加载到调色板中。然后用户可以将调色板中的元素添加到场景中,创建一些电路并保存(序列化)它们。
问题是当程序尝试打开保存的文件(反序列化元素)时出现异常。因为没有模块知道(依赖于)带有元素的模块(并且这些模块中的包不能公开导出)。元素仅被注释,足以让它们到达用户。
是否有可能不每次都添加对具有反序列化元素的新模块的依赖。或者一般来说,有一种方法可以反序列化隐藏在 ServiceProvider 类后面的类对象。