我在現有的項目中構建了一個休息接口。該項目有一個類定義了大約4種不同類型的操作。每個操作都採用不同類型的對象來定義查詢參數。每個操作都會返回一個不同類型的對象,所有這些對象都是XML jaxb編碼對象,並最終被編組爲一個OutputStream。什麼時候在Java中使用泛型類
我正在解析URL中的參數,並構建各種操作所需的查詢對象。目前,我有一個抽象查詢父類,這是一個QueryFactory類,它在查詢類型之間切換,並返回特定於URL中請求類型的子查詢類。所有的子查詢類都實現了一個抽象的「buildQueryParameters」方法,並以Object類型的形式得到結果。
這樣就好嗎?有一些奇特的方式來使用參數化類型或泛型類來構建我的查詢參數對象嗎?我發現自己建立這些switch語句都在我的代碼的請求類型之間的區別,我不知道這是最好的辦法......
編輯:
我的子類,因爲我的servlet代碼如下像這樣:
Query query = QueryFactory.getInstance(parameterMap, requestEnum);
query.buildQueryParams();
Object queryParams = query.getQueryParams();
查詢工廠是非常直截了當:
public static Query getInstance(Map<String, String> parameterMap, RequestEnum requestEnum) {
switch (requestEnum) {
case GETSTATUS: {
return new GetStatusQuery(parameterMap);
}
case DESCRIBEOPS: {
return new DescribeOpsQuery(parameterMap);
}
case GETSTATUSBYID: {
return new GetStatusByIdQuery(parameterMap);
}
case GETEVENTS: {
return new GetEventsQuery(parameterMap);
}
default:
break;
}
return null;
}
抽象查詢類也是無聊:
public abstract class Query {
protected Map<String, String> validatedMap;
private Object queryParams;
public SOSQuery(Map<String, String> parameterMap) {
this.parameterMap = parameterMap;
}
public Object getQueryParams() {
return this.queryParams;
}
public abstract void buildQueryParams();
protected void setQueryParams(Object queryParams) {
this.queryParams = queryParams;
}
protected Map<String, String> getParameterMap() {
return this.parameterMap;
}
每個子類都實現了buildQueryParams()方法,併爲每個不同類型的請求/操作創建所需的特定對象,並將它們作爲對象返回,而編組沒有問題處理,所以我不一定需要更具體的返回類型。
我們看一些代碼。 – 2012-03-08 21:54:30
爲什麼你有查詢子類(子類)呢?您可以爲參數名稱創建一些常量,然後使用這些常量設置並在QueryFactory中設置正確的值(然後再不是真正的*工廠(TM)*)/相應的方法。 – 2012-03-08 21:57:37