首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在强类型的OOP语言中进行鸭子类型的参数?

在强类型的OOP语言中进行鸭子类型的参数?
EN

Stack Overflow用户
提问于 2009-07-03 14:17:10
回答 4查看 540关注 0票数 1

有没有这样的情况,你用这样的语言(例如C#,Java)写了一些东西,并且错过了鸭子类型?(有关反对鸭子类型的参数,请参阅this question )

EN

回答 4

Stack Overflow用户

发布于 2009-07-03 14:37:11

每次你需要使用你不拥有的代码,并且没有适当的抽象(HttpContext任何人?)。因为你不能让你的方法接受IHttpContext,因为HttpContext类型没有那种抽象,你只能满足于适配器和/或工厂之类的东西。如果您能够在代码中定义IHttpContext契约,使其看起来像HttpContext,将您的方法设置为接受IHttpContext,并传递一个真正的HttpContext对象来隐藏到IHttpContext中,那将会非常好。

票数 3
EN

Stack Overflow用户

发布于 2009-07-03 14:31:01

另一个问题与鸭子打字没有什么关系。无论如何,假设这个没有结束,我会说我真的很怀念鸭子类型的时候是在尝试用大型API测试类的时候。我们需要一个单独的框架来创建它们的模拟,而在另一种编程语言中,你可以想象到只需要传入一个自己编写的类来实现你所需要的最基本的东西。

例如,尝试在没有框架的情况下在java中模拟JDBC ResultSet,这是一种痛苦。

票数 2
EN

Stack Overflow用户

发布于 2009-07-03 14:38:43

绝不可能。从90年代就开始使用Java,从01年左右开始使用Python。

这就是为什么我从来不会错过Java中的鸭子类型。

“Java中的Duck Typing问题”实际上是关于对多态的完全理解失败。如果您曾经认为您需要任何类型的运行时类型标识或"isinstance“功能,那么您未能掌握多态,并且您做错了。

请参阅Programmer Ignorance Pet Peeve问题。未能掌握多态性是一个巨大的问题,并导致了“Java中的鸭子类型”错误。

如果您了解多态性,那么就不需要进行鸭子类型,并且在Python和Java之间切换时也不会错过它。

在相关注释中,我只使用Python的isinstance()作为断言的一部分,以创建一个函数,该函数需要整数在获得非整数时变大。在Java语言中,isinstance()有时与尝试一起使用,以完成类似于鸭子输入的事情。

关键是我太老了(52岁),不是很聪明。因此,我必须在Python中保持一个“强”的类层次结构,否则我会感到困惑。我总是在Python设计中留出空间,以便在必要时重构为更严格的类层次结构。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1079559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档