私は複雑な円形の一般的な構造を持っています:
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パラメーターのようなものを宣言するにはどうすればよいですか?元のジョブ宣言を変更できます。