首页 文章

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

提问于
浏览
2

这两个功能相互冲突 . 这个问题有解决方法吗?

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 回答

  • 5

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

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

  • 0

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

相关问题