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

时间:2016-08-02 08:03:13

标签: 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>()

这就是我需要的。

2 个答案:

答案 0 :(得分:5)

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

您需要为这些功能指定不同的名称。

答案 1 :(得分:0)

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