当前位置: 首页 > 知识库问答 >
问题:

为什么Kotlin不使用'List(…)'作为列表工厂和所有抽象集合的类似约定?

夔建章
2023-03-14

在Scala中,有一个方便的惯例,即通过伴随对象提供集合工厂方法,使用伴随对象的Application方法。所以,如果我想创建一个包含元素1、2和3的列表,我只需使用List(1、2、3)。所有集合类型的模式都是一致的。

在Kotlin中,如果我写列表(1,2,3)我会得到一个编译错误。要创建包含1、2和3的列表,必须使用listOf(1、2、3)<代码>列表是一个接口,所以它显然没有构造函数。可能有伴星,但没有。有一个List函数,不过它的签名与Scala(public-inline-fun)的签名不同

那么,为什么Kotlin藏书库的设计师选择不遵循与Scala类似的藏书工厂的统一惯例呢?


共有1个答案

沙小白
2023-03-14

为什么Kotlin藏书馆的设计师选择不遵循藏书工厂的统一惯例

有一个统一约定:使用静态编程语言标准库函数listOfarrayOfmapOf等,如文档中所述:

Kotlin没有用于创建列表或集合的专用语法结构。使用标准库中的方法,例如listOf()mutableListOf()setOf()mutableSetOf()

我不知道为什么Scala方法实际上会更好。如果你想拥有类似构造函数的函数,创建它们也没什么大不了的:

fun <T> List<T>(vararg e: T) = listOf(e)

//use it
val l = List(1, 2, 3, 4)
 类似资料:
  • 在抽象工厂模式中,涉及的主要实体是 抽象基地工厂 混凝土工厂每个延伸抽象基地工厂 客户端代码 基础产品 扩展基础产品的具体产品类别 我看过各种实现,并观察到客户机代码了解具体的工厂。根据我在不同地方看到的模式的共同定义,如下所示 定义一个用于创建对象的接口,但让子类来决定要实例化哪个类。 根据我的观察,是作为抽象工厂方法中的抽象方法实现的。它公开了一个非抽象的公共方法,比如,从中调用方法。根据具体

  • 本文向大家介绍简单工厂和抽象工厂有什么区别?相关面试题,主要包含被问及简单工厂和抽象工厂有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 简单工厂:用来生产同一等级结构中的任意产品,对于增加新的产品,无能为力。 工厂方法:用来生产同一等级结构中的固定产品,支持增加任意产品。 抽象工厂:用来生产不同产品族的全部产品,对于增加新的产品,无能为力;支持增加产品族。

  • 问题内容: 我现在正在学习Java,并且是Abstract的一部分。我读到一个奇怪的部分,我有一个抽象类,其中不包含任何abstarct方法。 他们为什么要使用此类课程? 问题答案: 为了防止实例化该类并将其仅用作基类。子类可以使用抽象类中定义的常规方法。 例如,创建的实例没有任何意义。但是所有车辆都可以重复使用一种通用方法。

  • 问题内容: 对于许多人来说,这可能是一个简单的问题,但令我感到困惑。我从Kathy Sierra挑选了一个示例,该示例显示了抽象类的效用,但我无法理解抽象类的总体重要性。 示例 我们有一个带有抽象方法- &的抽象类。这些方法在 BMW , Volkswagen 和 Audi的 子类中实现。 我的问题是- 为什么我们首先需要有抽象类来为每种汽车类型自定义方法?为什么在宝马的任何一种子类型中都没有这两

  • 问题内容: 场景 我正在用Java编写涉及汽车的程序。 注意:我已尽最大可能简化了此方案,以使其更加通用和易于理解。 我实际上不是在开车。 我创建了一个类,它是对象的集合。 该对象具有一个(double)和一个(int)。构造函数将年份作为参数,例如: 这是棘手的部分…汽车必须具有某种类型(比如说Corvette或Clunker)。克尔维特(克尔维特)的车子为and,Cl子(Clunker)的车子

  • 问题内容: 我知道有很多关于这两种模式之间差异的文章,但是有些事情我找不到。 从我阅读的内容中,我看到工厂方法模式允许您定义如何创建单个具体产品,但是将实现隐藏给客户端,因为他们将看到通用产品。我的第一个问题是关于抽象工厂。它的作用是允许您在其中创建具体对象系列(取决于您使用的是哪个特定工厂),而不仅仅是一个具体对象吗?抽象工厂是否只返回一个非常大的对象或取决于调用的方法的许多对象? 我的最后两个