Java vs Smalltalk - 协变和逆变

Java vs Smalltalk - covarince and contravariance

Smalltalk 是否支持协变和逆变?这些概念适用于这种语言吗?

Smalltalk 是严格动态类型的。它只关心参数对象是否响应它发送的消息。如果不是,它会在发送消息时的 运行 时间引发 DNU(不理解)(您可以手动处理,或在代码中响应)。在编译时,每个参数都是一个对象,你可以向任何对象发送任何消息。

协变和逆变是与声明的参数类型和 return 值相关的概念。例如,如果子类方法中的参数类型可以指定比超类中的类型更通用的类型,则方法参数是逆变的。

Smalltalk 没有静态类型声明。您可以应用协变和逆变的概念,但由于该语言允许您向任何对象发送任何消息,因此它不会强制执行协变和逆变可能需要的任何规则。

所以,是的,Smalltalk 支持协变和逆变,因为它允许您使用这些概念,而不是因为它不关心其中一种方式。