2016-08-02 44 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

相關問題