有没有办法限制 stdlib 函数在 Kotlin 中的可见性?
Is there a way of limiting stdlib functions' visibility in Kotlin?
Kotlin 附带了许多标准库函数,其中很多默认情况下是可见的,无需实际导入。因此像 listOf
、arrayListOf
、ArrayList<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[]
------------------------------------
Kotlin 附带了许多标准库函数,其中很多默认情况下是可见的,无需实际导入。因此像 listOf
、arrayListOf
、ArrayList<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[]
------------------------------------