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. 十六、Struts2文件上传与下载

    文件上传与下载 1.文件上传前提:<form action="${pageContext.request.contextPath}/*" method="post& ...

  2. EXT格式误删除恢复

    http://hatemysql.com/ 1.从/proc文件系统恢复数据#lsof |grep -i deletecat 11791 root 1w REG 253,0 94 1048589 /h ...

  3. Custom PeopleSoft Queries

      The following SQL identifies custom queries created in your system from the PSQRYDEFN PeopleTools ...

  4. Git客户端图文详解如何安装配置GitHub操作流程攻略

    收藏自 http://www.ihref.com/read-16377.html Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来保存工程源代码历史状态的命令行工具; 保存点 : ...

  5. 合并果子 (codevs 1063) 题解

    [问题描述] 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和 ...

  6. LinqToSql中使用事务(2)

    原文地址:http://www.cnblogs.com/blusehuang/archive/2007/07/16/819677.html

  7. Python脚本控制的WebDriver 常用操作 <四> 设置浏览器大小

    下面将使用webdriver来控制浏览器窗口的大小 测试用例场景 设置浏览器窗口的大小有下面两个比较常见的用途: 在统一的浏览器大小下运行用例,可以比较容易的跟一些基于图像比对的工具进行结合,提升测试 ...

  8. python去掉空行

    #用strip(),split()两个方法都可以判断空行 infile=open('/.../','r') outfile=open('/.../','w') for li in infile.rea ...

  9. openSUSE13.1安装搜狗输入法 for Linux

    一句话总结:爽死我了!什么叫输入的快感终于体会到了,搜狗输入法,码农的好伙伴!!! 转自openSUSE论坛 女王陛下 https://forum.suse.org.cn/viewtopic.php? ...

  10. EmguCV学习——简单算法 差分与高斯

    公司项目需要检测运动物体,我对opencv也没啥研究,google了好久看了好多方法,最简单的就是差分与高斯背景建模了. 旁边搞c++的同事正在搞更nb的算法,等出来了 我再转成C#版的分享. 先看差 ...