2016-08-02 98 views
2

这两个函数相互冲突。 是否有解决此问题的方法?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>() 

这就是我所需要的。

回答

5

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

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

0

将注释@JvmName("foo2")添加到其中一个功能。

+0

感谢您的回答!我已经尝试过没有成功。 – abond

相关问题