【发布时间】:2017-07-04 01:37:24
【问题描述】:
Kotlin 附带了许多标准库函数,其中很多函数在默认情况下是可见的,而无需实际导入它们。因此,listOf、arrayListOf、ArrayList<T>() 等函数实际上已插入到全局命名空间中。是否有可以禁用此行为的编译器标志?
【问题讨论】:
-
您的问题已在下面得到解答,但您能评论一下为什么您希望这样做吗?
-
感觉像是一个潜在的错误来源。有一堆具有相当通用名称的函数有效地贴在全局命名空间中,当您隐藏一个时编译器不会发出警告。它应该会使用您的函数定义,但即使这样也感觉有点不一致,因为对于将被忽略的类/对象扩展函数实际上并非如此(尽管在这种情况下至少编译器会发出警告) .
-
我认为这应该不是问题。您只是不应该创建与标准库函数具有相同签名的函数。就像您不应该创建与 Java 标准库中的类同名的类(例如
Integer、String或ArrayList)。 -
是的,或者与标准库类具有相同签名的类...我不知道,我想我只是有点喜欢 C++ 命名空间,它们感觉更干净。
-
也许要进一步澄清...据我所知,我可能会在 Kotlin 模块中做这样的事情:
fun <T> println(x: T) = kotlin.io.println("Print an empty line, I dare you"),然后是fun println() = sudoRmRfDash()或替代fun println() = solveTSPFor100NodesAndEmailMe("my@email.com")如果导入我的库,用户实际上会使用它,作为 .class 分发?还是我在这里遗漏了什么?
标签: intellij-idea kotlin kotlinc