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吗在不知道具体实现的情况下初始化?没有足够的信息来理解您试图解决的问题,但从类名判断,您可能会将继承与组合混淆。似乎
上下文
区域
研究
的属性。看,它看起来像是“多态化”通过子类型和泛型创建一个完整的对象图。当需要更改某些内容时,您可能会遇到维护性噩梦。但仅从类签名很难猜测实际设计可能是什么。尝试使用较短的类名、命名空间包……您需要泛型吗?您不能只使用
接口
或不知道具体实现的超类?没有足够的信息来理解您试图解决的问题,但是从类名判断,您可能会混淆继承和组合