java泛型由于设计选择而变得沉重
我有以下的学习课程,我希望是通用的:java泛型由于设计选择而变得沉重,java,generics,architecture,Java,Generics,Architecture,我有以下的学习课程,我希望是通用的: public abstract class Study< T1 extends Context, T2 extends Region, T3 extends Domain<T2>, T4 extends Solution> {... 公共抽象类研究< T1扩展了上下文, T2延伸区域, T3扩展域, T4扩展了解决方案>{。。。 派生类的示例如下所示: public class American
public abstract class Study<
T1 extends Context,
T2 extends Region,
T3 extends Domain<T2>,
T4 extends Solution> {...
公共抽象类研究<
T1扩展了上下文,
T2延伸区域,
T3扩展域,
T4扩展了解决方案>{。。。
派生类的示例如下所示:
public class AmericanCultureStudy<
T1 extends AmericanCultureContext,
T2 extends AmericanCultureRegion,
T3 extends AmericanCultureDomain<T2>,
T4 extends AmericanCultureSolution>
extends Study<T1, T2, T3, T4> {...
public class ContemporaryAmericanCultureStudy<
T1 extends ContemporaryAmericanCultureContext,
T2 extends ContemporaryAmericanCultureRegion,
T3 extends ContemporaryAmericanCultureDomain<T2>,
T4 extends ContemporaryAmericanCultureSolution>
extends AmericanCultureStudy<T1, T2, T3, T4> {...
public class ContemporaryMainstreamAmericanCultureStudy<
T1 extends ContemporaryMainstreamAmericanCultureContext,
T2 extends ContemporaryMainstreamAmericanCultureRegion,
T3 extends ContemporaryMainstreamAmericanCultureDomain<T2>,
T4 extends ContemporaryMainstreamAmericanCultureSolution>
extends ContemporaryAmericanCultureSolution<T1, T2, T3, T4> {...
公共课美国文化研究<
T1扩展了美国文化文本,
T2扩展了美国文化区域,
T3延伸至美国文化中心,
T4扩展美国文化解决方案>
扩展学习{。。。
公共阶层当代美国文化研究<
T1扩展了当代美国文化文本,
T2扩展了当代美国文化区域,
T3延伸了当代美国文化的主流,
T4扩展了当代美国文化解决方案>
扩展美国文化研究{。。。
公共阶层当代主流美国文化研究<
T1扩展了当代主流美国文化文本,
T2扩展了当代主流美国文化区域,
T3扩展了当代主流美国文化主流,
T4扩展了当代主流美国文化解决方案>
扩展当代美国文化解决方案{。。。
这种设计的结果是,主代码中类的实例化变得非常繁重,如下所示:
ContemporaryMainstreamAmericanCultureStudy<
ContemporaryMainstreamAmericanCultureContext,
ContemporaryMainstreamAmericanCultureRegion,
ContemporaryMainstreamAmericanCultureDomain<
ContemporaryMainstreamAmericanCultureRegion>,
ContemporaryMainstreamAmericanCultureSolution>
study = new ContemporaryMainstreamAmericanCultureStudy<
ContemporaryMainstreamAmericanCultureContext,
ContemporaryMainstreamAmericanCultureRegion,
ContemporaryMainstreamAmericanCultureDomain<
ContemporaryMainstreamAmericanCultureRegion>,
ContemporaryMainstreamAmericanCultureSolution>() ;
当代主流美国文化研究<
当代主流美国文化文本,
当代主流美国文化区域,
当代主流美国文化主流<
当代主流美国文化地区>,
当代主流美国文化解决方案>
研究=新当代主流美国文化研究<
当代主流美国文化文本,
当代主流美国文化区域,
当代主流美国文化主流<
当代主流美国文化地区>,
当代主流美国文化解决方案>();
Study
中包含的所有类虽然不同,但都属于相同的关注类型,因此必须有一种方法通过减少Study
发布的类型数量来减轻关注类型
有人能帮忙吗?
感谢在这种情况下,泛型真的是必要的吗?例如,是否有可能在构造函数中包含一组从
上下文
、区域
、域
和解决方案
派生的类对象?如果有可能,这肯定是正确的方法
如果不可能,您至少可以通过创建一个中间区域性类来隐藏一些沉重感,该类包含:
class Culture<
C extends Context,
R extends Region,
D extends Domain<R>,
S extends Solution> {
...
}
类文化<
C扩展了上下文,
R扩展了区域,
D扩展域,
S扩展解决方案>{
...
}
你需要一个混乱的声明,比如说,当代美国文化
,但是你的研究
实例可能是研究=新研究()
在这种情况下,泛型实际上是必要的吗?例如,是否有可能在构造函数中包含一组派生自上下文
、区域
、域
和解决方案
的类对象?如果有可能,这肯定是正确的方法
如果不可能,您至少可以通过创建一个中间区域性类来隐藏一些沉重感,该类包含:
class Culture<
C extends Context,
R extends Region,
D extends Domain<R>,
S extends Solution> {
...
}
类文化<
C扩展了上下文,
R扩展了区域,
D扩展域,
S扩展解决方案>{
...
}
你需要一个混乱的声明,比如说,当代美国文化
,但是你的研究
实例可能是研究研究=新研究()
在某种程度上,动态地做一些事情是值得的,比如在文件或数据库中存储下面这样的外部表:
|ID | Context | Region | Domain | Solution |
|123 | Abc | Def | Ghi | Jkl |
...
然后,您可以为这些实体定义操作/数据,例如打印内容时使用的字体、应该重定向的页面、允许多少学生参与学习等
您的对象将看起来像
class Study {
int id;
String context;
String region;
String domain;
String solution;
}
Typesafety很好,但是如果您想管理许多和/或不可预见的实体数量,那么您不应该以每次添加/更改/删除实体时都需要触摸代码的方式进行编码。在某些时候,动态地做一些事情是值得的,比如在文件或数据库中存储下面这样的外部表:
|ID | Context | Region | Domain | Solution |
|123 | Abc | Def | Ghi | Jkl |
...
然后,您可以为这些实体定义操作/数据,例如打印内容时使用的字体、应该重定向的页面、允许多少学生参与学习等
您的对象将看起来像
class Study {
int id;
String context;
String region;
String domain;
String solution;
}
Typesafety很好,但如果您想管理许多和/或不可预见的实体数量,那么您不应该以每次添加/更改/删除实体时都需要触摸代码的方式进行编码。尝试使用较短的类名、名称空间包……您需要泛型吗?您不能只使用接口
或super吗在不知道具体实现的情况下初始化?没有足够的信息来理解您试图解决的问题,但从类名判断,您可能会将继承与组合混淆。似乎上下文
和区域
是研究
的属性。看,它看起来像是“多态化”通过子类型和泛型创建一个完整的对象图。当需要更改某些内容时,您可能会遇到维护性噩梦。但仅从类签名很难猜测实际设计可能是什么。尝试使用较短的类名、命名空间包……您需要泛型吗?您不能只使用接口
或不知道具体实现的超类?没有足够的信息来理解您试图解决的问题,但是从类名判断,您可能会混淆继承和组合