2012-05-25 25 views
0

我有一個包含多個表示XPath查詢的String對象的String數組(String[])。這些查詢是在設計時預先確定的。此數組傳遞給執行查詢的對象,然後返回一個帶有結果的Map<String, ArrayList<String>>Java數組:使用常量標識向量的元素

的地圖是由這樣的:

{Query that originated the result, Results vector} 

因爲我得把這些結果,然後用它們來進行一些工作,我需要知道各個查詢。例如:

ArrayList<String> firstQueryResults = xpathResults.getObject(modelQueries[0]); 
... logic pertaining only to the first query results ... 

一個整數檢索的結果(在第一個查詢的情況下,「0」)似乎並沒有對我很好,所以我想知道是否會有通過識別它們的可能性枚舉類常量,更清晰:

... = xpathResults.getObject(QueryDictionary.MODEL_PACKAGE); 
... = xpathResults.getObject(QueryDictionary.COMPONENT_PACKAGE); 
OR 
... = xpathResults.getObject(ModelQueries.PACKAGE); 
... = xpathResults.getObject(ComponentQueries.PACKAGE); 

我想用地圖(即Map<String, String>Map {ID, Query}),但我仍然有通過硬編碼字符串(如「包」)來引用查詢。 我也想過使用enums,但我有幾個查詢集(模型,組件,...),我也需要獲取一組String[]表單中的所有查詢,以便將它們傳遞給執行查詢的對象。

回答

1

您可以使用一個標記接口:

public interface QueryType { 
} 

那麼你的枚舉可以實現此接口:

public enum ModelQueries implements QueryType { 
    ... 
} 

public enum ComponentQueries implements QueryType { 
    ... 
} 

等。

然後你的getObject方法可以接受類型爲QueryType的參數。你在找這樣的東西嗎?如果我沒有正確理解你的問題,請告訴我。

+0

我可以使用你的策略,然後改變查詢從簡單字符串到查詢類型的方式。 我需要使枚舉來保存String屬性(來保存查詢表達式)。 'public enum ModelQueries implements Query { PACKAGE(「\\ XPathQuery ...」); 字符串查詢;ModelQueries(String query){this.query = query; } }' –

+0

是的,這將是一種方式來做到這一點。您可以在界面中指定方法,以便所有的執行枚舉都必須實現它。 –

+0

您是否認爲這種解決方案過度消耗只是爲了避免查詢的「硬編碼」標識(即通過整數 - 數組索引或通過字符串映射鍵)?或者它是否值得澄清? –