Java与Smalltalk——共变与逆变

Java与Smalltalk——共变与逆变,smalltalk,covariance,contravariance,Smalltalk,Covariance,Contravariance,Smalltalk支持协变和逆变吗?这些概念适用于这种语言吗?Smalltalk是严格的动态类型。它只关心参数对象是否响应它发送的消息。如果没有,则会在运行时引发DNU无法理解的消息,您可以手动处理或在代码中响应该消息。在编译时,每个参数都是一个对象,您可以向任何对象发送任何消息。协方差和逆变是与声明的参数类型和返回值相关的概念。例如,如果子类方法中的参数类型可以指定比超类中的类型更通用的类型,则方法参数是反变的 Smalltalk没有静态类型声明。您可以应用协方差和逆变的概念,但由于该语言允许

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

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

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

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


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

您能详细说明一下Smalltalk是严格类型的吗?我不希望如此。这一定义的不同数量使得它可能不适合使用。严格来说,这也意味着变量的用户不能像在其他语言中那样,出于目的或意外地更改解释。这些其他语言通常是静态类型的,编译器随后对此进行补偿,并确保使用受控类型转换(如java中的受控类型转换或C/C++中的非受控类型转换)进行适当的访问(如果需要),或者如果静态类型系统不足的话。在Smalltalk中,对象本身知道它是什么类型,并且对象的用户不能对其进行重新解释,因为用户在对象上有引用,这既不是自愿的,也不是偶然的。