下面是C ++,C#和其他类似语言的完美结构。为什么这在Kotlin中是不可能的
open class EndPoint<T> (url: String): T{
...
}
class BlueEndPoint: EndPoint<BlueInterface>{}
class RedEndPoint: EndPoint<RedInterface>{}
答案 0 :(得分:8)
因为Kotlin使用泛型而不是模板。它只有一个EndPoint
类,而不是像C ++那样为每个T
创建一个新类。
在JVM上,这个类只需要扩展一个超类(可能是Object
)和一组特定的接口(可能没有)。即你不能EndPoint<BlueInterface>
实施BlueInterface
而不是RedInterface
,反之亦然EndPoint<RedInterface>
。
根据MSDN,它在C#中也不起作用(我相信CLR在定义类时有相同的要求):
C# does not allow the type parameter to be used as the base class for the generic type.
这是C ++,这是例外。
答案 1 :(得分:1)
它是由JVM泛型限制引起的。您可以阅读[此处](https://docs.oracle.com/javase/tutorial/java/generics/restrictions.html)的更多信息。