2

私は複雑な円形の一般的な構造を持っています:

interface Job<J extends Job<J,R,E>, R extends Recipient<J,R,E>, E extends Event<J,R,E>> { }
interface Recipient<J extends Job<J,R,E>, R extends Recipient<J,R,E>, E extends Event<J,R,E> { }
interface Event<J extends Job<J,R,E>, R extends Recipient<J,R,E>, E extends Event<J,R,E> { }

このデザインは、コピーと貼り付けのコードをトリミングした結果です。この方法ではタイプセーフですが、使用するのは非常に困難です。

class EmailJob implements Job<EmailJob, EmailRecipient, EmailEvent> { }
class VoiceCallJob implements Job<VoiceCallJob, VoiceCallRecipient, VoiceCallEvent> { }
//Recipient and Event classes omitted.

以下は、ジョブに依存しないクラスのサンプルです。

class LoadBalanceProcessor<J extends Job<J,R,E>, R extends Recipient<J,R,E>, E extends Event<J,R,E>> {
    @Inject
    Provider<JobDao<J extends Job<J,R,E>, R extends Recipient<J,R,E>, E extends Event<J,R,E>>> jobDaoProvider;
    long getTimeToWait(J job, R recipient){...}
}

私が望むのは、これらの3つの汎用パラメーターを1つにグループ化し、簡単に宣言することです。

class LoadBalanceProcessor<JobTypeGroup>{
    @Inject
    Provider<JobDao<JobTypeGroup>> jobDaoProvider;
    long getTimeToWait(/* ?? */) {...}
}

Job-Recipient-Eventトリプレットを指すJobTypeGroupパラメーターのようなものを宣言するにはどうすればよいですか?元のジョブ宣言を変更できます。

4

0 に答える 0