2017-06-10 13 views
1

のは、我々は次の拡張機能を持っているとしましょう:Kotlinの別のクラスから静的な拡張関数にアクセスするには?

class Helper { 
    companion object { 
    fun Int.plus(value: String) = Integer.valueOf(value).plus(this) 
    } 

}

はどのようにして、別のクラスにHelperクラスからplus拡張機能にアクセスすることができます。

class OtherClass { 
    fun someMethod() { 
    val eight = 7.Helper.Companion.plus("1") 
    } 

}

答えて

1

拡張子は、このように宣言がmember extension functionあり、そして唯一のHelperクラス内で見えるようになるだろう:私たちは、例えば、このような何かを行うことができます方法はあります。あなたがそのクラスの外でそれにアクセスする必要があるならば、例えばそれをトップレベルの機能にするなど、より広いスコープに入れてください。また、クラス内に保持する場合は、2つのパラメータを取る通常の関数にすることもできます。


あなたは+シンボルでそれを使用したい場合は、追加のヒントとして、あなたはこの機能operatorをマークすることができます

operator fun Int.plus(value: String) = Integer.valueOf(value) + this 

val x = 2 + "25" 
+0

この回答に時間をとってくれてありがとう – user2491598

3

あなたの例Int.plus(value: String)ではHelper.Companionオブジェクトのメンバ関数(ありますコンパニオンオブジェクトであるか、別のクラスの内部にあるということは関係ありません)。このケースは、ドキュメントのDeclaring Extensions as Membersのセクションで説明されています。スコープの両方でそれらを持っている必要が受信機(タイプIntの延長レシーバおよびタイプHelper.Companionのディスパッチ受信機)と機能にアクセスするため要するに

、。

これは多くの方法で達成することができる。

with(Helper.Companion) { 
    239.plus("") 
} 

又は

with(Helper.Companion) { 
    with(239) { 
     plus("") 
    } 
} 

P.S.拡張関数をコンパニオンオブジェクトに入れることは、非常に不規則であり、慣用的ではありません。なぜあなたがそれを必要とするのか想像がつきません。

+0

ありがとうございました。 – user2491598

関連する問題