Kotlin泛型

在Kotlin中如何为一个方法强制实现一个泛型? 我知道,例如,你可以做到以下几点:

var someVar: MutableSet<out SomeType> = hashSetOf() 

你怎么能做同样的方法?

 fun <T> doSomething() { } 

我想强制TX类型或它的子类型。

谢谢。

经过Google搜索后,正确的答案是:

 fun <T : X> doSomething() { } 

实际上out SomeType如您的问题所示out SomeType意味着超过“类型参数可以是SomeType或其任何子类型”。

关键字out是Kotlin的说法,在这个例子中, MutableSetMutableSet生产者 ,即它的类型参数是协变的 。 因此,你将无法调用像add(t:T) ,但是只能返回T s,比如get():T

回到你的问题:如果你的方法应该接受X或它的子类型的类型,你应该使用“边界”:

 fun <T : X> doSomething() { } 

这正是你所需要的,但是要再次说清楚,不能说与你的另一个例子是等价的。

作为@ s1m0nw1引用,你可以使用fun <T : X> doSomething() { }

限制X的T亚型,

另外,你可以使用fun <T> doSomething where T : Comparable, T : Cloneable { }

限制T应该实现ComparableCloneable

如这里所引用的https://kotlinlang.org/docs/reference/generics.html