0

私はジェネリックにしたい次のスタディクラスを持っています:

public abstract class Study<
    T1 extends Context, 
    T2 extends Region,
    T3 extends Domain<T2>, 
    T4 extends Solution> {...

派生クラスの例は次のとおりです。

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> {...

この設計の結果、メイン コードでのクラスのインスタンス化が次のように重くなります。

ContemporaryMainstreamAmericanCultureStudy<
    ContemporaryMainstreamAmericanCultureContext, 
    ContemporaryMainstreamAmericanCultureRegion,
    ContemporaryMainstreamAmericanCultureDomain<
        ContemporaryMainstreamAmericanCultureRegion>,
        ContemporaryMainstreamAmericanCultureSolution> 
    study = new ContemporaryMainstreamAmericanCultureStudy<
        ContemporaryMainstreamAmericanCultureContext,
        ContemporaryMainstreamAmericanCultureRegion,
        ContemporaryMainstreamAmericanCultureDomain<
            ContemporaryMainstreamAmericanCultureRegion>,
        ContemporaryMainstreamAmericanCultureSolution>() ;

に含まれるすべてのクラスStudyは異なりますが、すべて同じ懸念タイプであるため、によって投稿されたタイプの数を減らすことによってこれを軽くする方法が必要Studyです。

誰でもこれを手伝うことができますか?ありがとう

4

2 に答える 2

2

この場合、ジェネリックは実際に必要ですか?たとえば、ContextRegionDomain、およびから派生したクラスのオブジェクトのグループをコンストラクターに取り込むことは可能でしょうSolutionか? それが可能であれば、それは間違いなく正しい方法です。

Cultureそれが不可能な場合は、次の中間クラスを作成することで、少なくとも重さの一部を隠すことができる場合があります。

class Culture<
    C extends Context, 
    R extends Region,
    D extends Domain<R>, 
    S extends Solution> {
  ...
}

たとえば、 の乱雑な宣言が 1 つ必要ですContemporaryAmericanCultureが、Studyインスタンス化は になる可能性がありますStudy<ContemporaryAmericanCulture> study = new Study<ContemporaryAmericanCulture>()

于 2013-03-23T13:55:40.467 に答える