Kotlin:如何声明一个具有固定可容许类型参数集的泛型函数



我想写一个函数,将一对整数转换为一对BigInteger。允许的参数类型为IntLongBigInteger:

fun <A, B> foo(a: A, b: B) {
val x = if (a is BigInteger) a else a.toBigInteger()
val y = if (b is BigInteger) b else b.toBigInteger()
return Pair(x, y)
}

是否可以通知Kotlin编译器AB必须在IntLongBigInteger的集合中?

不幸的是,我认为这目前不可能,或者对他们来说有足够的用处来考虑实现它。我找不到任何关于缺乏支持的具体提及,但(多个(上限的文档说:

传递的类型必须同时满足where子句的所有条件。在上面的示例中,T类型必须同时实现CharSequence和Comparable。

唯一干净的(ish(解决方案可能是过载,但如果允许IntLong等的任何组合,这将引入大量重复。

最新更新