加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:57:01 所属栏目:安全 来源:网络整理
导读:我怀疑这两段代码之间有什么区别. 显而易见的是,如果方法是在类中编写的,则必须实例化类,而如果它在伴随对象中,则不需要这样做. 但是,还有其他差异吗?哪些是有利有弊的? 在类中定义一个方法 class Hello { def hello = println("Hello world")}object Hell
我怀疑这两段代码之间有什么区别.

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

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

在类中定义一个方法

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
  }
}

解决方法

如果你还记得Scala来自Java,它可能会更有意义.在Java中,只有一个类,它有静态方法,它们不依赖于实例中的任何字段(但可以读取静态字段)和常规(非静态,实例级)方法.区别在于“SomeType常见的功能,特别是没有实例”,以及“需要特定实例状态的功能”.前者是Java中的静态方法,后者是实例方法.在Scala中,所有静态部分都应该放在对象中,实例级val和def在类中.
例如:

object MyNumber {
    // This does not depend on any instance of MyNumber
    def add(c: Int,b: Int): Int = c + b
}
class MyNumber(a: Int) {
    // This depends on an instance of MyNumber
    def next: Int = a + 1
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读