我想写一个函数,将一对整数转换为一对BigInteger
。允许的参数类型为Int
、Long
和BigInteger
:
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编译器A
和B
必须在Int
、Long
、BigInteger
的集合中?
不幸的是,我认为这目前不可能,或者对他们来说有足够的用处来考虑实现它。我找不到任何关于缺乏支持的具体提及,但(多个(上限的文档说:
传递的类型必须同时满足where子句的所有条件。在上面的示例中,T类型必须同时实现CharSequence和Comparable。
唯一干净的(ish(解决方案可能是过载,但如果允许Int
、Long
等的任何组合,这将引入大量重复。