我何时应该使用Scala类以及何时在IDE中使用Scala对象?

时间:2018-05-30 10:16:17

标签: scala

我见过许多情况,我们可以使用Scala对象文件创建一个Scala项目,并在其中包含我们的代码而无需使用Scala类文件。

我目前正在开发一个项目,其中开发人员已在Scala object文件(作为对象)中编写代码,而不是写入class文件。更精确的是,我的IDE的屏幕截图显示代码是在目标文件中写的。

enter image description here

我想知道在Scala类和目标文件中编写代码的重要性。使用它们的理想方案是什么? 有一个类似的帖子here,它只显示了一个类和一个对象之间的区别,但是我想知道何时应该考虑使用Scala类以及何时使用Scala对象?

2 个答案:

答案 0 :(得分:2)

如果要使用差值多次创建相同的数据结构,请使用class。例如,类可以表示数据库应用程序中的一行数据,或Web服务器中的客户端请求。

当您只需要程序中的数据结构的单个副本时,请使用object。例如,程序的命令行或数据缓存。

类可以具有较短的生命周期,因此将它们用于来来去去的数据。对象始终持续到程序完成,因此将它们用于需要永久可用的数据。

object转换为class是相当简单的,所以从object开始,除非您知道您将需要多个数据实例。

如果您只想将相似的功能或数据分组(在namespace中),请将其放在object

如果您要编写软件库的代码,请使用可根据需要创建和删除的类。

请注意,这适用于顶级对象。 object也可以用作类成员或本地值,但在这种情况下,它的操作类似于class,因为它可以有多个实例,并且可能具有有限的生命周期。

答案 1 :(得分:0)

对象是您在程序中只能拥有一个对象的东西。它大部分时间用于包含不会发生太大变化的功能或对象。它在其他语言中相当于static 例如:

object StringUtils {
  val LF = "\n"
  def toUpperCase(str: String) = str.toUpperCase() 
}

// usage
StringUtils.toUpperCase("foo")

另一方面,您可以使用new创建课程。您可以在程序中拥有多个类的实例

class StringContainer(str: String) {
  def toUpperCase() = new StringContainer(str.toUppercase())
}

// usage
val myString = new StringContainer("foo")
myString.toUpperCase()

有关更详细的示例,您可以查看scala文档: