为什么在Kotlin中无法使用此代码?

Sim*_*low 0 design-patterns kotlin

下面是C++,C#和其他类似语言的完美构造.为什么这在Kotlin中是不可能的

open class EndPoint<T> (url: String): T{

...
}

class BlueEndPoint: EndPoint<BlueInterface>{}
class RedEndPoint: EndPoint<RedInterface>{}
Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 8

因为Kotlin使用泛型而不是模板.它只有一个EndPoint类,而不是T像C++那样创建一个新类.

在JVM上,这个类只需要扩展一个超类(可能Object)和一组特定的接口(可能没有).即你可以没有EndPoint<BlueInterface>实现BlueInterface但不RedInterface和,反之亦然EndPoint<RedInterface>.

根据MSDN,它在C#中也不起作用(我相信CLR在定义类时有相同的要求):

C#不允许将type参数用作泛型类型的基类.

它是C++,这是例外.