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

Java 如何避免为泛型类中的所有依赖项声明类型参数,java,oop,generics,abstract-class,Java,Oop,Generics,Abstract Class,我对下面的问题有一些疑问。有人能帮忙吗 问题是: 下面的设计好吗 如果是,如何改进它以避免在entry类中声明类型参数 问题 假设我正在处理类来处理请求并获取响应数据。我有 请求处理程序-调用查询帮助程序以获取数据 查询帮助程序-调用查询生成器来生成查询并使用它调用数据库 查询生成器-生成查询 在我的例子中,每个不同的请求都需要不同的返回类型。查询帮助器还为不同的请求返回不同的类型。在这种情况下,我使用泛型类和抽象类来设计它 abstract class RequestHandler<

我对下面的问题有一些疑问。有人能帮忙吗

问题是:

  • 下面的设计好吗
  • 如果是,如何改进它以避免在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();
    }
    
    抽象类RequestHandler{
    QueryHelper助手;
    T1 doGet(请求){
    ...
    callDatabase();
    返回customLogic();
    }
    抽象逻辑
    }
    抽象类QueryHelper{
    QueryBuilder-builder;
    t2calldatabase(){
    ...
    client.call(builder.buildQuery());
    返回自定义逻辑(…);
    }
    抽象逻辑
    }
    抽象类QueryBuilder{
    抽象查询buildQuery();
    }
    
    通过这种设计,我可以用不同的子类处理不同的请求。e、 g.对于获取产品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()
    }
    
    
    类ProductAQueryBuilder扩展了QueryBuilder{
    @凌驾
    查询buildQuery(){
    ...
    }
    }
    类ProductAQueryHelper扩展了QueryHelper{
    QueryBuilder-builder;
    ProductAQueryHelper(ProductAQueryBuilder){
    this.builder=builder;
    }
    @凌驾
    TypeA自定义逻辑()
    }
    类ProductARequestHandler扩展了RequestHandler{
    QueryHelper助手;
    ProductARequestHandler(ProductAQueryHelper){
    this.helper=helper;
    }
    @凌驾
    TypeB自定义逻辑()
    }
    
    这似乎很好,因为我简化了问题。实际上,对于RequestHandler和QueryBuilder,我有不止一个类型参数,这使得我必须在RequestHandler中声明许多类型参数。这让我很烦恼,因为我必须为依赖项链声明所有类型参数。有什么办法可以改进吗


    谢谢

    类型是T1、T2、T3、T4、。。。真的独立吗?或者,例如T3可以表示为集合?您的RequestHandler示例表明T1和T2可能具有很强的相关性。嗨,拉尔夫,谢谢您的评论!T1,T2,T3,T3真的很独立-谢谢你提醒我这一点。我会看看是否可以减少一些。只是想快速检查一下(我在OOD方面不是很有经验),这种类型的设计是一种可靠的模式吗?还是我应该寻找其他选择?