2016-08-02 7 views
2

この2つの関数は互いに競合します。 この問題の回避策はありますか?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>() 

私は必要なものだそれ:

後で、このようにそれを使用することができます。

答えて

5

これらの関数はコンパイラの観点から同じシグネチャを持ちます。型パラメータは関数のシグネチャの一部ではありません。コンパイラによって自動的に推論されるため、さまざまなオーバーロードへの呼び出しの曖昧さを排除します。

これらの機能に異なる名前を割り当てる必要があります。

0

注釈@JvmName("foo2")を機能の1つに追加します。

+0

答えをありがとう!私はすでに成功なしでこれを試しました。 – abond

関連する問題