Kotlin中两个具有不同类型参数的函数

这两个功能相互冲突。 有没有解决这个问题的方法?

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>() 

这就是我所需要的。

从编译器的角度来看,这些函数具有相同的签名。 类型参数不是函数签名的一部分; 它可以被编译器自动推断出来,因此不会消除对不同重载的调用的歧义。

您需要为这些功能分配不同的名称。

将注释@JvmName("foo2")到其中一个函数中。