1
代码设计:委托任意函数
在PPCG上,我们经常遇到“山丘之王”挑战,这使不同的代码bot相互竞争。我们不希望将这些挑战限制为单一语言,因此我们通过标准I / O进行跨平台通信。 我的目标是编写一个框架,使挑战编写者可以使用它来简化编写这些挑战的过程。我想满足以下要求: 挑战编写者可以创建一个类,其中方法表示每种不同的通信。例如,在我们的《善与恶》挑战中,作者将创建一个Player具有abstract boolean vote(List<List<Boolean>> history)方法的类。 当调用上述方法时,控制器能够提供通过标准I / O进行通信的上述类的实例。也就是说,并非上述类的所有实例都必须通过标准I / O进行通信。其中的3个机器人可能是本机Java机器人(简单地覆盖了Player该类,另外2个机器人则使用另一种语言) 这些方法将不会总是具有相同数量的参数(也不会总是具有返回值) 我希望挑战编写者必须尽可能少地工作才能使用我的框架。 我不反对使用反射来解决这些问题。我考虑过要求挑战编写者做类似的事情: class PlayerComm extends Player { private Communicator communicator; public PlayerComm(Communicator communicator){ this.communicator = communicator; } @Override boolean vote(List<List<Boolean>> history){ return (Boolean)communicator.sendMessage(history); } } 但是如果有几种方法,这可能会很重复,而且持续进行强制转换并不有趣。(sendMessage在此示例中,将接受可变数量的Object参数,并返回Object) 有一个更好的方法吗?