2012-05-25 28 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

您是否认为这种解决方案过度消耗只是为了避免查询的“硬编码”标识(即通过整数 - 数组索引或通过字符串映射键)?或者它是否值得澄清? –