Действительно, если они находятся в одном пакете, он не скомпилируется. Для другого сценария предположим, что у вас есть два файла с двумя разными пакетами, содержащими функции расширения с одинаковой сигнатурой:
Первый файл:
package ext1
fun Int.print() = print(this)
Второй файл:
package ext2
fun Int.print() = print(this * 2)
И этот файл, где вы пытаетесь его использовать:
package main
fun main(args: Array<String>) {
42.print()
}
IntelliJ фактически предоставит вам диалоговое окно импорта, в котором вы можете выбрать, какой из них вы хотите использовать:
Вы можете импортировать один из них следующим образом:
import ext1.print
И если вам нужно использовать и другой, вы можете переименовать его с помощью ключевого слова as
. Это ключевое слово работает для импорта в целом, классов с таким же именем и т. д.
import ext2.print as print2
Итак, эта программа компилирует и печатает 4284
:
package main
import ext1.print
import ext2.print as print2
fun main(args: Array<String>) {
42.print()
42.print2()
}
В качестве краткого примечания: тот, который вы импортируете с ключевым словом as
, будет немного сложнее в использовании, поскольку автозаполнение, похоже, плохо его подбирает, выбор второго варианта здесь просто завершает вызов 42.print()
.
person
zsmb13
schedule
12.03.2017