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()及单例的更多相关文章

  1. scala伴生对象

    package com.test.scala.test /** * 伴生对象指的是在类中建立一个object */ class AssociatedObject { private var count ...

  2. scala 伴生对象与伴生类

    package cn.scala_base.oop.scalaobject import java.security.cert.Extension /** * object的构造器必须是无参的,且且构 ...

  3. scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类

    一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person ...

  4. Scala单例对象、伴生对象实战详解

    1.Scala单例对象 Scala单例对象是十分重要的,没有像在Java一样,有静态类.静态成员.静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员. ...

  5. Scala单例对象和伴生对象

    1.Scala单例对象 Scala单例对象是十分重要的,没有像在Java一样,有静态类.静态成员.静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员. ...

  6. Scala入门1(单例对象和伴生类)

    一.Hello World程序的执行原理 参考http://blog.csdn.net/zhangjg_blog/article/details/22760957 object HelloWorld{ ...

  7. 010-Scala单例对象、伴生对象实战详解

    010-Scala单例对象.伴生对象实战详解 Scala单例对象详解 函数的最后一行是返回值 子项目 Scala伴生对象代码实战 object对象的私有成员可以直接被class伴生类访问,但是不可以被 ...

  8. Scala伴生类和伴生对象

    单例对象与类同名时,这个单例对象被称为这个类的伴生对象,而这个类被称为这个单例对象的伴生类.伴生类和伴生对象要在同一个源文件中定义,伴生对象和伴生类可以互相访问其私有成员.不与伴生类同名的单例对象称为 ...

  9. 快学Scala 第九课 (伴生对象和枚举)

    Scala没有静态方法和静态字段, 你可以用object这个语法结构来达到同样的目的. 对象的构造器只有在第一次被使用时才调用. 伴生对象apply方法: 类和它的伴生对象可以互相访问私有特性,他们必 ...

随机推荐

  1. 由后序遍历结果构造二叉查找树 && 二叉查找树链表化

    二叉查找树通俗说就是左孩子比父亲小,右孩子比父亲大.构造这么一个树,树嘛,递归即可. 例如一棵树后序遍历是这样(下图的树):2 9 8 16 15 10 25 38 45 42 30 20.最后的20 ...

  2. 解决phpcms图片太大撑破表格图片自适应图片按比例缩小

    img,a img{ border:0; margin:0; padding:0; max-width:590px; width:expression(this.width590?590px:this ...

  3. Windows系统错误代码大全

    1 Microsoft Windows 系统错误代码简单分析: 0000 操作已成功完成.0001 错误的函数. 0002 系统找不到指定的文件. 0003 系统找不到指定的路径. 0004 系统无法 ...

  4. Silverlight取得Session

    首先Session是运行在服务器上的,而Silverlight运行在客户端.因此在Silverlight中使用SESSION的说法并不准确, 只因大家经常这样搜索才起这个名字. 有两种方法实现Silv ...

  5. Miniprofiler在普通net项目中的使用

    1.Global.asax中配置 Void Application_BeginRequest(Object sender, EventArgs e){ If(Request.IsLocal){ //请 ...

  6. 封装Html5 Fullscreen API

    复制前言: 使用新的全屏 API,可以将用户的注意力导向特定元素,同时隐藏背景或转移对其他应用的注意力.因为W3C全屏规范还未达到最终版本,所以大多数浏览器供应商都使用唯一标识符为 API 添加前缀. ...

  7. 《安全参考》HACKCTO-201311-11

    小编的话 “晴空一鹤排云去,便引诗情到碧宵” 11月是一个让人思绪飞扬.感慨万千的时节. 就在这时,在我们小伙伴的并肩奋战下,第十一期<安全参考>又跟大家见面了. 你还在为女朋友在购物狂欢 ...

  8. 【Zend Studio】10.6.0版本设置默认编码为UTF-8

    1.打开Windows->Prefefences 2.找到Workspace->Text file encoding,修改为UTF-8,OK保存.

  9. 银河英雄传说 (codevs 1540) 题解

    [问题描述] 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰 ...

  10. 学习simple.data之进阶篇

    一.结果排序 -OrderBy(升序) -OrderByDescending(降序) db.Product.All().OrderByFactoryName(); db.Product.All().O ...