为什么 kotlin 引入 "global notation" `listOf()` 而不是像 Java 这样的静态工厂函数 `List.of()`?
Why kotlin introduced "global notation" `listOf()` instead of static factory `List.of()` functions like Java?
要在 Kotlin 中创建集合,我们可以使用 listOf()/mapOf()/arrayOf()
工厂函数。与 Java 的静态工厂表示法相比,这些函数以“全局表示法”定义:List<>.of()
.
在我看来,Java 创建静态集合的方法更直观并且鼓励更好的编程实践。 Kotlin 的方式似乎是一个糟糕的决定——函数的名称隐式绑定到它们返回的类型。它与 Kotlin 的清晰点相矛盾。
为什么 Kotlin 开发者决定使用 listOf()
mutableListOf()
而不是 List.of()
和 MutableList.of()
会更好?
我已经读过 this question,但答案并不令人满意 - 没有关于为什么它以它的形式存在以及它比简单的静态工厂式方法有什么好处的信息。
我不是 Kotlin 语言设计师,所以不知道确切答案。
List
是一个接口,因此不应与特定实现相关。如果您将 of
添加到界面,那么您需要为要返回的列表选择一些实现。
listOf
无论如何都不是一个“特殊”函数,它只是 returns 列表的某种实现的一个共同点,如果你有一些特定的用例需要另一个list implementation 你可以定义你自己的 magicListOf
方法,它看起来与 listOf
.
处于相同的“级别”
从历史的角度来看,Kotlin 在 2016 年正式发布并引入了该表示法,然后 List.of
到 2017 年 Java(Java 9)。所以,没有明显的,而是。
在语法上,List.of
在List
接口中作为静态函数实现。由于 Kotlin 中没有 static
关键字,因此应将其实现为伴生对象的重载方法(用于零个、一个和多个 (vararg
) 个参数)。这将导致 GETSTATIC
+ INVOKEVIRTUAL
调用而不是简单的 INVOKESTATIC
(在全局 listOf
情况下)。
要在 Kotlin 中创建集合,我们可以使用 listOf()/mapOf()/arrayOf()
工厂函数。与 Java 的静态工厂表示法相比,这些函数以“全局表示法”定义:List<>.of()
.
在我看来,Java 创建静态集合的方法更直观并且鼓励更好的编程实践。 Kotlin 的方式似乎是一个糟糕的决定——函数的名称隐式绑定到它们返回的类型。它与 Kotlin 的清晰点相矛盾。
为什么 Kotlin 开发者决定使用 listOf()
mutableListOf()
而不是 List.of()
和 MutableList.of()
会更好?
我已经读过 this question,但答案并不令人满意 - 没有关于为什么它以它的形式存在以及它比简单的静态工厂式方法有什么好处的信息。
我不是 Kotlin 语言设计师,所以不知道确切答案。
List
是一个接口,因此不应与特定实现相关。如果您将 of
添加到界面,那么您需要为要返回的列表选择一些实现。
listOf
无论如何都不是一个“特殊”函数,它只是 returns 列表的某种实现的一个共同点,如果你有一些特定的用例需要另一个list implementation 你可以定义你自己的 magicListOf
方法,它看起来与 listOf
.
从历史的角度来看,Kotlin 在 2016 年正式发布并引入了该表示法,然后 List.of
到 2017 年 Java(Java 9)。所以,没有明显的,而是。
在语法上,List.of
在List
接口中作为静态函数实现。由于 Kotlin 中没有 static
关键字,因此应将其实现为伴生对象的重载方法(用于零个、一个和多个 (vararg
) 个参数)。这将导致 GETSTATIC
+ INVOKEVIRTUAL
调用而不是简单的 INVOKESTATIC
(在全局 listOf
情况下)。