java—如何避免为泛型类中的所有依赖项声明类型参数

ajsxfq5m  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(277)

我对下面的问题有些疑问。有人能帮忙吗?
问题是:
下面的设计好吗?
如果是,如何改进它以避免在entry类中声明类型参数。
问题
假设我正在处理类来处理请求并获取响应的数据。我有
请求处理程序-调用查询帮助程序来获取数据
查询助手-调用查询生成器来生成查询并用它调用数据库
查询生成器-生成查询。
在我的例子中,每个不同的请求都需要不同的返回类型。查询助手还为不同的请求返回不同的类型。在本文中,我用泛型类和抽象类来设计它。

abstract class RequestHandler<T1, T2> {
  QueryHelper<T2> helper;

  T1 doGet(Request request) {
    ...
    helper.callDatabase();
    return customLogic();
  }

  abstract T1 customLogic()
}

abstract class QueryHelper<T2> {
  QueryBuilder builder;

  T2 callDatabase() {
    ...
    client.call(builder.buildQuery());
    return customLogic(...);
  }

  abstract T2 customLogic()
}

abstract class QueryBuilder {

  abstract Query buildQuery();
}

通过这种设计,我可以用不同的子类处理不同的请求。e、 对于get product a请求,我有

class ProductAQueryBuilder extends QueryBuilder {

  @Override
  Query buildQuery() {
    ...
  }
}

class ProductAQueryHelper extends QueryHelper<TypeA> {
  QueryBuilder builder;

  ProductAQueryHelper(ProductAQueryBuilder builder) {
    this.builder = builder;
  }

  @Override
  TypeA customLogic()
}

class ProductARequestHandler extends RequestHandler<TypeB, TypeA> {
  QueryHelper<TypeA> helper;

  ProductARequestHandler(ProductAQueryHelper helper) {
    this.helper = helper;
  }

  @Override
  TypeB customLogic()
}

这看起来不错,因为我简化了问题。实际上,我有不止一个requesthandler和querybuilder的类型参数,这使得我不得不在requesthandler<t1,t2,t3,t4…>处声明许多类型参数。这让我很困扰,因为我必须声明依赖项链上的所有类型参数。有没有办法改进?
谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题