有没有办法限制 stdlib 函数在 Kotlin 中的可见性?

Is there a way of limiting stdlib functions' visibility in Kotlin?

Kotlin 附带了许多标准库函数,其中很多默认情况下是可见的,无需实际导入。因此像 listOfarrayListOfArrayList<T>()、... 这样的函数实际上被插入到全局命名空间中。是否有可以禁用此行为的编译器标志?

遗憾的是,你不能。就像你不能在 java 中禁止自动导入的 java.lang 包一样。

您无需担心自动导入的顶级函数。如果您不使用任何顶级函数,则不会向 Java 字节代码发出 Class Reference/Method 引用。并且所有的*arrayOf函数都会转化为Java数组创建,例如:

Kotlin          |        Java
------------------------------------
byteArrayOf     |    new byte[]
------------------------------------
shortArrayOf    |    new short[]
------------------------------------
intArrayOf      |    new int[]
------------------------------------
longArrayOf     |    new long[]
------------------------------------
floatArrayOf    |    new float[]
------------------------------------
doubleArrayOf   |    new double[]
------------------------------------
charArrayOf     |    new char[]
------------------------------------
booleanArrayOf  |    new boolean[]
------------------------------------
arrayOf<T>      |    new T[]
------------------------------------