gpt4 book ai didi

java - Kotlin 扩展冲突

转载 作者:IT老高 更新时间:2023-10-28 13:39:25 25 4
gpt4 key购买 nike

如果我有一个 jar,在类路径上,我在其中创建了一个扩展函数,比如说 String 类作为参数,并且我在 String 上有另一个具有相同扩展函​​数的 jar,Kotlin 将如何解决这两者?

我想如果两个函数都定义在同一个包中,那么会有冲突吗?

但是如果不同的包,我如何区分这两个扩展?

最佳答案

确实,如果它们在同一个包中,它将无法编译。对于另一种情况,假设您有两个包含两个不同包的文件,其中包含具有相同签名的扩展函数:

第一个文件:

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 实际上会给您一个导入对话框,您可以在其中选择要使用的那个:

enter image description here

您可以像这样导入其中一个:

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().

enter image description here

关于java - Kotlin 扩展冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42752651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com