そのため、かなり複雑なシステムを機能させようとしています。これが私が試みていることの基本です。
ルール:
abstract class Rule
{
// stuff
}
class ExampleRule extends Rule
{
// stuff
}
ハンドラー:
abstract class RuleHandler<T extends Rule>
{
Class<T> clazz;
RuleHandler(Class<T> forClass)
{
this.clazz = forClass;
}
abstract void doStuff(T rule);
}
class ExampleRuleHandler extends RuleHandler<ExampleRule>
{
ExampleRuleHandler()
{
super(ExampleRule.class);
}
void doStuff(ExampleRule rule)
{
// stuff
}
}
そして、それらを結び付けます:
class HandlerDispatcher
{
Map<Class<? extends Rule>, RuleHandler<? extends Rule>> handlers;
void register(RuleHandler<? extends Rule> handler)
{
handlers.put(handler.clazz, handler);
}
void doStuff(List<Rule> rules)
{
for(Rule rule : rules)
{
RuleHandler<? extends Rule> handler = handlers.get(rule.getClass());
handler.doStuff(rule);
}
}
}
class Test
{
void main()
{
HandlerDispatcher hd = new HandlerDispatcher();
hd.register(new ExampleRuleHandler());
}
}
これまで、さまざまなパラメーター (ワイルドカード、制限付きなど) のさまざまな組み合わせを試みましたが、型関連のエラーなしでこのコンパイルをまだ取得していません。洞察、解決策、または代替アプローチは大歓迎です。