我在这里有一个Extensionpoint指向一个界面:
public interface IModelProcessor {
public void processModel(Object diagramModel);
}
因此,每个想要使用Extensionppoint的插件都必须提供带有processModel(Object diagramModel)的IModelProcessor。我的问题是:
我现在如何从实现此Extensionpoint的eclipse插件中获取返回值?我当然可以使用返回值,如下所示:
public ReturnContainer processModel(Object diagramModel);
但是因为不是每个插件都会提供返回值,所以我必须制定约定,在这种情况下插件应该返回null,这在我看来相当脏。 您对此有何看法:
public void processModel(Object diagramModel, Observer returnObserver);
因此,每个想要传递返回值的插件都可以注册Observer(ofc,插件必须是Observable)并在其上调用update方法。你怎么看待它?
答案 0 :(得分:2)
这实际上取决于您希望合约的样子。一般来说,我觉得使用返回值比使用你提到的Observer选项更直观。通常我会使用返回值,并在发生错误时抛出异常。您也可以让每个插件返回一个对象,即使所述对象是"空"。从插件返回值没有什么特别之处,只要所有插件都可以访问您想要返回的类。
答案 1 :(得分:1)
我可以想到一些选择。
如何在界面中添加getMyValue()
方法。然后它必须默认通过抽象超类返回null。如果您确实有要返回的值,则该类将重载get方法并返回有效值。
在Eclipse中很常见的是以这种方式使用抽象超类来设置不使用它们的子类的方法的默认处理。