scala中apply的使用方法以及应用

25 阅读1分钟

apply的基本使用

在 Scala 中,apply 方法放在类的伴生对象(object)里,主要起到 工厂方法的作用,能够让使用者在创建该类实例时省去显式的 new 关键字,并且可以通过重载提供多种构造方式。

package txy
//apply
//作用:写在伴生对象中,就可以允许创建对象的时候省略new
object Demo9 {
  class Lo () {

  }
  object Lo {
    def apply():Lo = {
      println("qqqq")
      new Lo()
    }
  }
  def main(args: Array[String]): Unit = {
    val l = new Lo()
    val c = new Lo()
    println(l == c)
    val l1 = Lo()
    val l2 = Lo()
    println(l1 == l2)
    //为new创建的2个不同对象,故为flase
    //在伴生对象中提供了apply方法,那么这里就会自动去调用他
  }
}

在上面的基础代码中,我们产生的对象还是在apply中通过new构造出来的,这样的话,如果我们多次生成对象,则得到的对象还是各不相同的。

如何解决呢

可以在伴生对象中定义一个唯一实例,然后在在apply函数中直接返回它。

package txy
//apply
//作用:写在伴生对象中,就可以允许创建对象的时候省略new
object Demo9 {
  class Lo () {

  }
  object Lo {

    val ne = new Lo()
    def apply():Lo = {
      println("qqqq")
      ne
    }
  }
  def main(args: Array[String]): Unit = {
    val l = new Lo()
    val c = new Lo()
    println(l == c)
    val l1 = Lo()
    val l2 = Lo()
    println(l1 == l2)
    //此时为2个相同的单例对象,故为true
    //在伴生对象中提供了apply方法,那么这里就会自动去调用他
  }
}