码迷,mamicode.com
首页 > 移动开发 > 详细

scala伴生对象,apply()及单例

时间:2015-12-21 17:40:48      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

1:伴生对象与apply方法

如果一个class与一个object具有相同的名字,那么我们就认为它们互为伴生。object为class的伴生对象。如下图所示,object Apply为class Apply的伴生对象。

 

需要注意的小细节是,伴生对象的apply函数哪怕没有参数也需要加上一对”()”.

 

 

class Apply {
  def apply = {
    println(" class apply")
  }
  
  def test = println("class test")
}

object Apply{
  def apply() = {//注意这里的apply()函数定义哪怕没有参数,也不能省略()
    println("object apply")
    new Apply
  }
  
}

object main_ extends App{
  val apply = Apply()
  apply.test
}

 

我们可以在伴生对象里实现apply函数,在函数里做一些事情,如果我们想要得到class对象的实例,而没有通过new的方式,那么它会先去执行该class的伴生对象的apply函数

 

执行上述代码,结果:

object apply

class test

 

可以看到,第一行代码得到一个apply对象,它首先执行了伴生对象的apply(),然后执行了class Apply的test(),可以表明它确实是一个class Apply对象。

 

apply的应用:

比如可以用来实现单例,需要两个步骤,一把class的构造设为private,二在class的伴生对象里实现apply函数,在这里返回class的对象。

 

class Apply private {//构造函数私有化
  def apply = {
    println(" class apply")
  }
  
  def test = println("class test")
}

object Apply{
  val apply_i = new Apply()//伴生对象可以访问类的私有属性和函数
  def apply() = {//注意这里的apply()函数定义哪怕没有参数,也不能省略()
    println("object apply")
    apply_i
  }
  
}

object main_ extends App{
//  val apply = Apply()
//  apply.test
  
  for(i <- 0 until 10){
    val apply_i = Apply()
    println(apply_i)
  }
    
}

 

执行代码结果:

 技术分享

可以看到均为同一对象。

scala伴生对象,apply()及单例

标签:

原文地址:http://www.cnblogs.com/eryuan/p/5063653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!