这两个功能相互冲突 . 这个问题有解决方法吗?
inline fun <reified T: Any> foo() = ...
inline fun <reified T: Any, reified I: Any> foo() = ...
谢谢!
编辑:
我找到了这个问题的方便(至少对我来说)解决方案:
inline fun <reified T: Any> foo() = foo<T, MyDefaultType>()
inline fun <reified T: Any, reified I: Any> foo(type1: KClass<T> = T::class, type2: KClass<I> = I::class) = ...
如果您选择仅添加一个参数,它甚至可以简洁 .
稍后您可以像这样使用它:
val x = foo<A, B>()
val y = foo<C>()
这就是我需要的 .
2 回答
从编译器的角度来看,这些函数具有相同的签名 . 类型参数不是函数签名的一部分;它可以由编译器自动推断,因此不用于消除对不同重载的调用的歧义 .
您需要为这些功能指定不同的名称 .
将注释
@JvmName("foo2")
添加到其中一个函数中 .