Java 为什么Kotlin使用arrayOf这样的全局函数
我是科特林的新手。我觉得这是一种奇怪的做法 对于Java 为什么Kotlin使用arrayOf这样的全局函数,java,kotlin,Java,Kotlin,我是科特林的新手。我觉得这是一种奇怪的做法 对于arrayOf/mutableListOf,本能的做法是尝试使用构造函数构造这些类型中的一种,即新数组(…args)。甚至是一个静态工厂方法,比如(…)的LocalDateTime. 为什么没有使用new Array(),或者至少没有使用作用域函数,即Array.of。这些方法是否也会扰乱全局范围 Kotlin不使用new关键字 它清楚地表明数组是否可变 有javascript和本机库将调用映射到其他实现 arrayOf和mutableListOf
arrayOf
/mutableListOf
,本能的做法是尝试使用构造函数构造这些类型中的一种,即新数组(…args)
。甚至是一个静态工厂方法,比如(…)的LocalDateTime.
为什么没有使用new Array()
,或者至少没有使用作用域函数,即Array.of
。这些方法是否也会扰乱全局范围
new
关键字arrayOf
和mutableListOf
不在“全局范围”(甚至不存在)。它们分别位于kotlin
和kotlin.collections
包中
恰好kotlin.*
和kotlin.collections.*
是任何kotlin文件的默认导入,因此您不必自己进行导入。看
这类似于Java,默认情况下导入Java.lang.
,您不需要指定它
此外,您不能“构造”arrayOf和mutableListOf,因为它们不是类型;它们是方法——事实上,它们以小写字母开头是表示它们的标准方式——类型以大写字母开头
Kotlin允许类外的包级别的方法(虽然在为JVM编译时,它们将在类内),但这与Java中的
导入静态
没有很大区别,通过它,您可以从类中访问静态方法,而无需将类名作为前缀。JRE没有全局作用域,它将始终包装在类中。是的,编译时。我说的是科特林的全球范围。这里有很多东西,它们的作用域不是类/命名空间的形式,没有全局作用域——所有东西都在一个包中。默认情况下会导入一些包(比如java.lang在java中),但这不会将它们放在全局范围内。MutableArray.of显然是一个可变数组。@Tobiq没有Kotlin有arrayOf
和mutableArrayOf
?@Tobiq有点3,其他lib没有数组类。事实上,我希望Groovy使用[…]类似速记的功能。JetBrains至少在几个版本之前将该语法添加到了注释中。