java泛型设计_由于设计选择,java泛型沉重

我有以下我想成为普通学生的学习课程:

public abstract class Study<

T1 extends Context,

T2 extends Region,

T3 extends Domain,

T4 extends Solution> {...

派生类的示例如下:

public class AmericanCultureStudy<

T1 extends AmericanCultureContext,

T2 extends AmericanCultureRegion,

T3 extends AmericanCultureDomain,

T4 extends AmericanCultureSolution>

extends Study {...

public class ContemporaryAmericanCultureStudy<

T1 extends ContemporaryAmericanCultureContext,

T2 extends ContemporaryAmericanCultureRegion,

T3 extends ContemporaryAmericanCultureDomain,

T4 extends ContemporaryAmericanCultureSolution>

extends AmericanCultureStudy {...

public class ContemporaryMainstreamAmericanCultureStudy<

T1 extends ContemporaryMainstreamAmericanCultureContext,

T2 extends ContemporaryMainstreamAmericanCultureRegion,

T3 extends ContemporaryMainstreamAmericanCultureDomain,

T4 extends ContemporaryMainstreamAmericanCultureSolution>

extends ContemporaryAmericanCultureSolution {...

这种设计的结果是,类在主代码中的实例化变得很重,如下所示:

ContemporaryMainstreamAmericanCultureStudy<

ContemporaryMainstreamAmericanCultureContext,

ContemporaryMainstreamAmericanCultureRegion,

ContemporaryMainstreamAmericanCultureDomain<

ContemporaryMainstreamAmericanCultureRegion>,

ContemporaryMainstreamAmericanCultureSolution>

study = new ContemporaryMainstreamAmericanCultureStudy<

ContemporaryMainstreamAmericanCultureContext,

ContemporaryMainstreamAmericanCultureRegion,

ContemporaryMainstreamAmericanCultureDomain<

ContemporaryMainstreamAmericanCultureRegion>,

ContemporaryMainstreamAmericanCultureSolution>() ;

Study中包含的所有类虽然不同,但都属于同一关注类型,因此必须有一种方法通过减少Study发布的类型数量来简化这一点。

有人能帮忙吗?谢谢

不可读…

尝试使用较短的类名、命名空间包…

你需要仿制药吗?你不能在不知道具体实现的情况下使用interface或superclass吗?

没有足够的信息来理解您试图解决的问题,但是根据类名判断,您可能会混淆继承和组合。似乎Context和Region是Study的属性。请参阅stackoverflow.com/questions/11031843/inheritance vs composit&zwnj;&8203;ion

它看起来像是通过子类型和泛型"多态"整个对象图。当某些事情需要改变时,您可能会遇到可维护性的噩梦。但从类签名来看,很难猜测实际的设计可能是什么。

在这种情况下,仿制药真的是必要的吗?例如,是否可能只接受一组从Context、Region、Domain和Solution派生的类对象?如果可能的话,这绝对是正确的选择。

如果这是不可能的,那么您至少可以通过创建一个中间的Culture类来隐藏一些沉重感:

class Culture<

C extends Context,

R extends Region,

D extends Domain,

S extends Solution> {

...

}

你需要一个杂乱无章的声明,比如说,ContemporaryAmericanCulture,但是你的Study实例化可以是Studystudy = new Study()。

在某种程度上,动态地做一些事情是值得的,比如在文件或数据库中存储下面这样的外部表:

|ID    | Context | Region | Domain | Solution |

|123   | Abc     | Def    | Ghi    | Jkl      |

...

然后,您可以为这些实体定义操作/数据,例如打印内容时要使用的字体、应该重定向的页面、允许多少学生参与学习等。

你的物品看起来像

class Study {

int id;

String context;

String region;

String domain;

String solution;

}

类型安全性很好,但是如果您想要管理许多和/或不可预见的实体,那么您不应该以这样的方式编码,即每次添加/更改/删除实体时都需要触摸代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值