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
。这些方法是否也会扰乱全局范围

  • Kotlin不使用
    new
    关键字
  • 它清楚地表明数组是否可变
  • 有javascript和本机库将调用映射到其他实现

  • 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至少在几个版本之前将该语法添加到了注释中。