何时使用类(Class) vs 对象(Object) vs 样例类(Case Class) vs 特质(Trait)

23

目前我所理解的内容是:

当我们需要实例化对象时应该使用类。

只有当我们需要单例需求,也就是不需要多个“对象”的实例时才使用“对象”。当我们在项目中构建公共库函数或实用程序函数时,可以使用“对象”,这样每次使用该对象的方法/函数时都需要实例化。

当我们想要节省样板代码时,可以使用案例类。例如,“Stock”类通常具有数百个成员变量。如果我们使用案例类,开发人员无需编写设置器和获取器的代码,因为它会生成大量默认代码。

特质:不知道何时使用。特质和对象都不在初始化期间接受参数。

如有更多想法和建议,请分享。


如果你想强制执行类不变量,使用普通的类而不是 case 类。 - jub0bs
1个回答

25

在Scala中,类的作用像其他面向对象语言(例如Java)一样,你可以使用类来构建应用程序中的对象(不是Scala对象),这些对象具有状态(例如保存一个人的姓名等属性)。

Scala对象是单例的。你主要在Scala中使用它来:

  • 创建不需要状态/属于特定对象的函数/工件。在其他面向对象语言中,你使用静态关键字来实现此行为。
  • 提供工厂方法(特别是通过apply方法)来实例化类(请参见Scala伴生对象)。

案例类旨在用作轻量级类(例如数据容器)。它们默认情况下是不可变的,并且应该按结构进行比较(即通过比较值/状态),而不是按引用比较。 此外,它们提供了开箱即用的序列化功能。

特质类似于Java中的接口,但具有更多功能。它们定义了类/对象的接口。

在深入Scala之前,我建议您首先熟悉经典的面向对象原则。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接