Scala在类中定义方法而不是在伴随对象上有什么区别

时间:2016-11-17 01:29:32

标签: scala

我怀疑这两段代码之间有什么区别。

显而易见的是,如果方法是在类中编写的,则必须实例化类,而如果它在伴随对象中,则不需要这样做。

但是,还有其他差异吗?哪些有利有弊?

在类

中定义一个方法
class Hello {
  def hello = println("Hello world")
}

object Hello {
  def main(args: Array[String]) {
    val instance = new Hello()
    instance.hello
  }
}

在配套对象中定义方法

class Hello {

}

object Hello {

  def hello = println("Hello world")

  def main(args: Array[String]) {
    this.hello
  }
}

1 个答案:

答案 0 :(得分:7)

如果你还记得Scala来自Java,它可能会更有意义。在Java中,只有一个类,它有mysql> use mysql; mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON yourdb.* TO james@localhost IDENTIFIED BY 'yourpassword'; mysql> FLUSH PRIVILEGES; mysql> \q 个方法,它们不依赖于实例中的任何字段(但可以读取static个字段)和常规(非静态,实例级)方法。区别在于“SomeType常见的功能,特别是没有实例”,以及“需要特定实例状态的功能”。前者是Java中的static方法,后者是实例方法。在Scala中,所有static部分都应放在static中,实例级objectval位于类中。 例如:

def