Kotlin泛型
在Kotlin中如何为一个方法强制实现一个泛型? 我知道,例如,你可以做到以下几点:
var someVar: MutableSet<out SomeType> = hashSetOf()
你怎么能做同样的方法?
fun <T> doSomething() { }
我想强制T
是X
类型或它的子类型。
谢谢。
经过Google搜索后,正确的答案是:
fun <T : X> doSomething() { }
实际上out SomeType
如您的问题所示out SomeType
意味着超过“类型参数可以是SomeType或其任何子类型”。
关键字out
是Kotlin的说法,在这个例子中, MutableSet
是MutableSet
的生产者 ,即它的类型参数是协变的 。 因此,你将无法调用像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应该实现Comparable
和Cloneable