我在现有的项目中构建了一个休息接口。该项目有一个类定义了大约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