我最近一直在想,在 Java 和 C# 等语言中,将“鸭子”类型作为方法参数类型包含在内是否是一种很好的语法糖形式?这将如下所示:
void myFunction(duck foo) {
foo.doStuff();
}
这可能是通过反射调用 doStuff() 的语法糖,或者它可以以不同的方式实现。Foo 可以是任何类型。如果 foo 没有 doStuff() 方法,这将引发运行时异常。关键是,当您需要时,即大多数时候,您将获得更严格的预先指定的接口范例(性能、错误检查)的好处。同时,您将拥有一个简单、干净的后门来避免打字,这将允许您干净地进行初始设计中未预见到的更改,而无需进行大量重构。此外,它可能会 100% 向后兼容,并与现有的语言结构完美结合。我认为这可能有助于减少过度设计的以防万一的编程风格,这种风格会导致混乱、混乱的 API。