2011-11-21 44 views
1

我有一個Extensionpoint這裏指向的接口:通過擴展點返回eclipse插件的值?

public interface IModelProcessor { 

    public void processModel(Object diagramModel); 
} 

因此,每一個想要USW認爲Extensionppoint必須提供一個IModelProcessor與中processModel(對象diagramModel)插件。我的問題是:

我該如何從eclipse插件中獲取返回值,該插件實現了此Extensionpoint?當然,我可以使用一個返回值,事端是這樣的:

public ReturnContainer processModel(Object diagramModel); 

但因爲不是每個插件將提供一個返回值,我不得不做出的約定,插件應返回空這種情況在我看來很髒。 您怎麼看待這個問題:

public void processModel(Object diagramModel, Observer returnObserver); 

所以,每一個插件在想傳遞的返回值可以註冊觀察者(OFC,該插件必須是可觀察),並調用Update方法就可以了。你怎麼想的?

回答

2

這實際上取決於你希望你的合同是什麼樣子。一般來說,我覺得使用返回值比使用你提到的Observer選項更直觀。通常我會使用返回值,並在發生錯誤時拋出異常。即使所述對象是「空的」,您也可以讓每個插件返回一個對象。只要所有插件都可以訪問您要返回的類,那麼從插件返回值就沒有什麼特別的了。

1

我可以想到一些選項。

如何在接口中添加getMyValue()方法。然後它將不得不默認通過抽象超類返回null。在確實有返回值的情況下,類將重載get方法並返回有效值。

在Eclipse中,使用抽象超類以這種方式設置不使用它們的子類的方法的默認處理是很常見的。