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