クラスパス上で、引数のためのStringクラスに拡張関数を作成し、同じ拡張関数を持つ別のjarをStringに作成したjarファイルがある場合、Kotlinはどのように解決しますか二?Kotlin拡張の衝突
私は、両方の機能が同じパッケージに定義されていて、衝突があるとしますか?
しかし、パッケージが異なる場合、どのように2つの拡張子を区別できますか?
クラスパス上で、引数のためのStringクラスに拡張関数を作成し、同じ拡張関数を持つ別のjarをStringに作成したjarファイルがある場合、Kotlinはどのように解決しますか二?Kotlin拡張の衝突
私は、両方の機能が同じパッケージに定義されていて、衝突があるとしますか?
しかし、パッケージが異なる場合、どのように2つの拡張子を区別できますか?
実際、同じパッケージに入っているとコンパイルされません。
まずファイル:
package ext1
fun Int.print() = print(this)
セカンドファイル:
package ext2
fun Int.print() = print(this * 2)
そして、この他のシナリオでは、同じシグネチャを持つ拡張機能を含む、あなたは2種類のパッケージで2つのファイルを持っているとしましょうファイルを使用しようとしている場所:
package main
fun main(args: Array<String>) {
42.print()
}
実際にIntelliJが提供しますあなたが使用したいかを選択することができますuのインポート]ダイアログ:
次のようなそれらの一つインポートすることができます。
import ext1.print
をそして、あなたはのような他のものを使用する必要がある場合よく、as
キーワードで名前を変更できます。このキーワードは
import ext2.print as print2
など、同じ名前を持つ一般的な、クラスでの輸入のために働くので、このプログラムは4284
をコンパイルし、印刷物:
as
とインポート一つとして
package main
import ext1.print
import ext2.print as print2
fun main(args: Array<String>) {
42.print()
42.print2()
}
オートコンプリートはうまくいきませんので、ここで2番目のオプションを選択すると、42.print()
への呼び出しが完了します。
のでkotlinでの拡張機能は、単なる静的な関数であることから、他の機能は、インポートによって区別されます。
また、あなたは、より読みやすくするための拡張機能の一つのエイリアスを作ることができます:包括的な答えを
import by.bkug.extensions.helpers.extension
import by.bkug.extensions.extension as extension1
fun test() {
myType().extension() // by.bkug.extensions.helpers.extension
myType().extention1() // by.bkug.extensions.extension
}
あなたの答えをありがとう –
感謝を。 –