org.eclipse.core.runtime.preferences 套件提供儲存外掛程式喜好設定的基礎架構。喜好設定通常會對映到喜好設定頁面中由使用者控制的設定,雖然這不是基礎架構所必要的。外掛程式喜好設定是鍵值配對,索引鍵說明喜好設定的名稱,值為數個不同類型的其中之一(boolean、double、float、int、long 或 string)。喜好設定可以由平台從檔案系統來儲存和擷取。儲存喜好設定的正確位置根據喜好設定的範圍而定。
您可以想像整體喜好設定是儲存為節點階層,階層的每一個主要分支代表一個特定範圍。任何特定節點的子項是根據該範圍的定義方式而定。如果是實例和配置範圍,子節點是喜好設定限定元通常是外掛程式的 ID 所指定的特定外掛程式的喜好設定。
如果以上的敘述已經產生混淆,請不必擔心。如果您不在意範圍和節點,就不需要擔心任何特定範圍或樹狀結構的哪一個節點實際包含您的喜好設定值。當您查詢喜好設定值並使用提供的限定元和喜好設定名稱來尋找實際包含值的節點時,喜好設定 API 將會自動以適當的次序(實例、配置、預設)來遍訪節點。
喜好設定是透過使用 IPreferencesService 協定來存取的。平台的預設喜好設定服務可以使用 Platform 類別來存取。
... IPreferencesService service = Platform.getPreferencesService(); ...
當取得喜好設定服務之後,即可使用 IPreferencesService 中提供的任何 get... 方法,依據名稱來查詢喜好設定值。例如,下列片段可查詢外掛程式 "com.example.myplugin" 中的 "MyPreference" 喜好設定值。
... IPreferencesService service = Platform.getPreferencesService(); boolean value = service.getBoolean("com.example.myplugin", "MyPreference", true, null); //對值做一些動作。 ...
查詢方法的最後一個參數是搜尋喜好設定節點時要使用的範圍環境定義陣列。如果陣列是 null,則平台會假設使用預設的範圍搜尋次序並猜測適當的喜好設定節點。如果傳遞了範圍環境定義的陣列,則會決定尋找喜好設定節點應該使用的範圍查閱次序。如果使用指定的範圍找不到任何節點,一定會採用預設的範圍查閱次序。
如果外掛程式需要更細微的範圍搜尋次序控制,可以使用代表範圍的類別來存取在特定範圍代表喜好設定的實際節點。在這個方法中,可以建立節點的陣列來指定必要的特定搜尋次序。下列片段可查詢以上使用之相同喜好設定的喜好設定服務,但是會搜尋外掛程式的配置範圍,然後搜尋外掛程式的實例範圍。當節點指定搜尋次序時,即不考慮預設的範圍設定。也就是說,平台只會搜尋提供的節點。
... IPreferencesService service = Platform.getPreferencesService(); Preferences configurationNode = new ConfigurationScope().getNode("com.example.myplugin"); Preferences instanceNode = new InstanceScope().getNode("com.example.myplugin"); Preferences[] nodes = new Preferences[] {configurationNode, instanceNode}; stringValue = service.get("MyPreference", "true", nodes); //對值做一些動作。 ...
外掛程式也可以實作自己的喜好設定樹狀節點遍訪。喜好設定樹狀結構的根節點可以從喜好設定服務來取得。範圍類別可用來進一步的遍訪樹狀結構。下列片段可遍訪特定的節點並從節點本身擷取喜好設定值。
... IPreferencesService service = Platform.getPreferencesService(); Preferences root = service.getRootNode(); Preferences myInstanceNode = root.node(InstanceScope.SCOPE).node("com.example.myplugin"); if (myInstanceNode != null) { value = node.getBoolean("MyPreference", "true"); //對值做一些動作。 } ...
外掛程式可以使用 org.eclipse.core.runtime.preferences 延伸來定義自己的特殊化範圍。在這個延伸中,外掛程式定義新範圍的名稱,以及可以對新範圍建立喜好設定節點的類別。它可以選擇性地指定初值設定該範圍的預設喜好設定值的類別名稱。當外掛程式定義新範圍時,是由該外掛程式來實作新範圍的遍訪次序(相對於平台遍訪次序)。我們將使用專案範圍的喜好設定的特定範例,來更加詳細瞭解這項功能。