gpt4 book ai didi

java - 什么时候在 Java 中使用泛型类合适

转载 作者:行者123 更新时间:2023-12-01 05:26:21 24 4
gpt4 key购买 nike

我正在现有项目中构建休息界面。该项目有一个类定义了大约 4 种不同类型的操作。每个操作都采用不同类型的对象来定义查询参数。每个操作都会返回不同类型的对象,所有这些对象都是 XML jaxb 编码的对象,并最终编码到 OutputStream。

我正在解析 URL 中的参数并构建各种操作所需的查询对象。目前,我有一个抽象 Query 父类,一个 QueryFactory 类,它在查询类型之间切换并返回特定于 URL 中的请求类型的子 Query 类。所有子查询类都实现抽象的“buildQueryParameters”方法并以对象类型获取结果。

这样就够了吗?是否有一些奇特的方法来使用参数化类型或泛型类来构建我的查询参数对象?我发现自己在代码中构建了这些 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;
}

抽象的 Query 类也很无聊:

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() 方法,并创建每种不同类型的请求/操作所需的特定对象,并将它们作为对象返回,编码器处理这些对象没有问题,因此我不一定需要更多具体返回类型。

最佳答案

您可以声明public abstract class SOSQuery<T> {然后private T queryParams;

public T getQueryParams() {
return this.queryParams;
}

等等...

对于您要声明的子类

public class GetStatusQuery extends SOSquery<GetStatusParticularType> {

这是您需要的吗?

关于java - 什么时候在 Java 中使用泛型类合适,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com