因此,我正在尝试使一个相当复杂的系统正常工作。这是我正在尝试的基础知识。
规则:
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());
}
}
到目前为止,我已经尝试了不同参数(通配符,受限符等)的各种组合,并且还没有进行与类型相关的错误的编译。欢迎任何见解,解决方案或替代方法。
观察到
RuleHandler<T extends Rule>
暗示 RuleHandler<?> === RuleHandler<? extends Rule>
以下代码正确(并编译)
abstract class RuleHandler<T extends Rule>
{
final Class<T> clazz;
// as before
}
class HandlerDispatcher
{
private final Map<Class<?>, RuleHandler<?>> handlers;
void register(RuleHandler<?> handler)
{
handlers.put(handler.clazz, handler);
}
void doStuff(List<Rule> rules)
{
for(Rule rule : rules)
{
@SuppressWarnings("unchecked")
RuleHandler<Rule> handler = (RuleHandler<Rule>) handlers.get(rule.getClass());
handler.doStuff(rule);
}
}
}
class Test
{
void main()
{
HandlerDispatcher hd = new HandlerDispatcher();
hd.register(new ExampleRuleHandler());
RuleHandler<?> handler = new ExampleRuleHandler();
hd.register(handler);
}
}
问题内容: 我是我的代码,我向ExecutorService提交了一些任务,然后使用shutdown()和awaitTermination()等待它们完成。但是,如果任何一项任务花费的时间超过某个时间段,我希望取消它而不影响其他任务。我使用来自ExecutorService的代码修改代码,该代码在超时后中断任务,如下所示: 一个测试用例,用于说明何时有时间完成任务以及何时它们都不工作 并且在我的代
我正在尝试使用然而,不管我使用的闭包返回参数是什么,我似乎都会遇到异常。 无法使用类型为“”的参数列表调用“animateWithDuration”(NSTimeInterval,延迟:NSTimeInterval,选项:UIViewAnimationOptions,animations:()- 这就是冒犯功能 老实说,我一定尝试过闭包返回参数的所有可能组合(有选项和没有选项),但没有运气。例如:
我是我的代码,我向ExecutorService提交一些任务,然后使用shutdown()和awaitTermination()等待它们完成。但是,如果任何一个任务需要超过一个特定的时间来完成,我希望它被取消,而不影响其他任务。我使用来自ExecutorService的代码修正代码,该代码在超时后中断任务,如下所示: 以及任务何时有时间完成和何时不能同时工作的测试案例 并且在我的代码中似乎起作用:
问题内容: 我有一堆系统命令,它们与将新内容附加到文件非常相似。我编写了一个简单的脚本来执行系统命令,如果存在诸如“ ls”,“ date”等单个单词,该脚本就可以很好地工作。但是如果命令大于此范围,则程序将死亡。 以下是代码 以下是我看到的错误 我想,这可能是由于未单独发送cmds和参数(http://golang.org/pkg/os/exec/#Command)导致的。我想知道如何颠覆这个问
问题内容: 为什么即使调用时返回并退出,嵌套函数仍会记住第一个值? 问题答案: 您可以看到它,因为所有源自父函数的变量都被子函数内的实际值替换。这样,无需跟踪父函数的范围即可使子函数正确运行。 将其视为“动态创建函数”。 这是python中的基本行为,对多个分配也是如此。 Python将其读取为 基本上,在对它们执行任何操作之前会先插入值。
假设我们有python中的函数: 虽然我可能会将传递给A,但我正在寻找一种优雅的方法来传递类似于的东西来执行。 我现在看到的唯一方法是发送一个函数列表并按顺序应用它们。有没有更好的办法?