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

时间:2018-05-14 11:03:03

标签: design-patterns kotlin

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

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

...
}

class BlueEndPoint: EndPoint<BlueInterface>{}
class RedEndPoint: EndPoint<RedInterface>{}

2 个答案:

答案 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)的更多信息。