Поэтому я пытаюсь заставить работать достаточно сложную систему. Вот основы того, что я пытаюсь.
Правила:
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());
}
}
До сих пор я пробовал различные комбинации различных параметров (с подстановочными знаками, с ограничениями и т. д.) и еще не получил эту компиляцию без ошибок, связанных с типом. Приветствуются любые идеи, решения или альтернативные подходы.