需要协变返回类型和“实值”的Scala语言是如何实现的?类方差在CLR上运行
本文关键字:实现 运行 CLR 方差 何实现 返回类型 实值 语言 Scala | 更新日期: 2023-09-27 18:02:53
CLR不支持协变返回类型或全方差(即应用于类,而不仅仅是接口和委托),但是有一些针对CLR的语言使用了这些特性中的一个或两个。
CLR是否有一些实际的解决方案来启用此功能,或者这些语言是否使用某种重写/擦除/…完全支持他们的特性集的技术?
可能与Java的方法相同(Java 5在语言级别上支持协变返回,但JVM不支持):通过添加合成方法。Java是这样做的:假设你有一个这样的类:
class Foo implements Cloneable {
@Override
public Foo clone() {
// ...
}
}
在幕后,生成了两个 clone
方法:public Foo clone()
(包含实际代码)和public Object clone()
(仅返回前者的结果)。后一种方法(它是合成的)是如何在JVM级别覆盖clone
方法的。