当我学习Haskell时,我注意到它的type class,这应该是源自Haskell的伟大发明。
程序员通过指定一组函数或常量名称以及它们各自的类型来定义类型类,对于每个属于该类的类型,它们必须存在。
这似乎与Java的界面非常接近对我来说,(引用Wikipedia的Interface(Java)页面):
Java编程语言中的接口是一种抽象类型,用于指定类必须实现的接口(在通用意义上)。
这两个看起来很相似:类型类限制类型的行为,而接口限制类的行为。
我想知道Haskell中的类型类和Java中的接口之间有什么区别和相似之处,或者根本上有区别吗?
编辑:我注意到什至haskell.org也承认它们是相似的。如果它们是如此相似(或者是?),那么为什么用此类炒作来处理类型class?
更多编辑:哇,这么多好答案!我想我必须让社区决定哪一个是最好的。但是,在阅读答案时,所有的人似乎都只是说:“ typeclass可以做很多事情,而interface不能或不必应付泛型”。我不禁想知道,接口有什么可以做而类型类不能做吗?另外,我注意到Wikipedia声称typeclass最初是在1989年的论文中发明的*“如何使ad hoc多态性减少ad hoc”,而Haskell仍处于摇篮中,而Java项目始于1991年并于1995年首次发布因此,也许不是typetype与接口类似,而是接口受typeclass影响?是否有任何文件/文件支持或反对?感谢所有答案,它们都非常有启发性!
感谢您的所有投入!