(转)scala apply方法 笔记

在akka源码中有这样一个Cluster类。

使用方法是这样的:val cluster = Cluster(context.system);

作为scala菜鸟的我,并没有找到Cluster(system..)这个有参的构造方法。于是开始接着学习scala。

Cluster是一个object单例对象。

Scala比Java更面向对象的一个方面是Scala没有静态成员。替代品是,Scala有单例对象:singleton object。

当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。你必须在同一个源文件里定义类和它的伴生对象。类被称为是这个单例对象的伴生类:companion class。类和它的伴生对象可以互相访问其私有成员。

定义单例对象不是定义类型(在Scala的抽象层次上说)

类和单例对象间的一个差别是,单例对象不带参数,而类可以。因为你不能用new关键字实例化一个单例对象,你没机会传递给它参数。每个单例对象都被作为由一个静态变量指向的虚构类:synthetic class的一个实例来实现,因此它们与Java静态类有着相同的初始化语法。Scala程序特别要指出的是,单例对象会在第一次被访问的时候初始化。

Scala 的apply 有2 张形式,一种是 伴生对象的apply ,一种是 伴生类中的apply,下面展示这2中的apply的使用。

示例代码:

class ApplyOperation {
}
class ApplyTest{
    def apply() = println("I am into spark so much!!!")
    def haveATry: Unit ={
        println("have a try on apply")
    }
}
object ApplyTest{
     def apply() = {
          println("I  am into Scala so much")
        new ApplyTest
     }
}
object ApplyOperation{
     def main (args: Array[String]) {
        val array= Array(1,2,3,4)
        val a = ApplyTest() //这里就是使用object 的使用

         a.haveATry
         a() // 这里就是 class 中 apply使用
    }
}

运行结果

I am into Scala so much 
have a try on apply 
I am into spark so much!!!

object apply 是一种比较普遍用法。 主要用来解决复杂对象的初始化问题。同时也是单例。

(是不是就像java中的单例工厂方法一样)

时间: 2024-10-16 10:18:15

(转)scala apply方法 笔记的相关文章

Scala 中apply方法的用法

Scala 是构建在 JVM 上的静态类型的脚本语言,而脚本语言总是会有些约定来增强灵活性.关于协议在Python中是挺多的,看看Python的对象协议,有很多很多,如果对Python的对象协议了解(不了解的可以点击此处)的比较深刻的话,其实scala的apply方法也是很好理解的,比如说 Scala 为配合 DSL 在方法调用时有这么一条约定: 在明确了方法调用的接收者的情况下,若方法只有一个参数时,调用的时候就可以省略点及括号.如 "0 to 2",实际完整调用是 "0.

每天学一点Scala之apply方法

apply方法一般什么地方出现 此方法一般在伴生对象中实现的 目的: 改变了创建伴生类实例的方式,不再通过new的方式,而是直接使用类名() 的方式,scala底层会隐式的调用apply方法 package com.xej.learning.apply /**   * apply方法: 就是创建对象时,不再使用new的形式,而是直接使用了类名()的形式   */ private[apply] class Storm object Storm{    //创建伴生类的对象时,会隐式的调用这个的  

scala中object和class的理解---apply方法是初始化方法

1.class Scala的类和C#中的类有点不一样,诸如: 声明一个未用priavate修饰的字段 var age,scala编译器会字段帮我们生产一个私有字段和2个公有方法get和set ,这和C#的简易属性类似:若使用了private修饰,则它的方法也将会是私有的.这就是所谓的统一访问原则. 细节的东西太多,还是上代码在注释里面细讲吧 [java] view plain copy //类默认是public级别的 class Person{ var age=18  //字段必须得初始化()

scala入门-08 apply方法和单例对象的使用

首先 在scala下的 org.scala.clazz下创建UsageOfApply.scala 我们做过Java开发都知道 main方法中的对象都是静态的,而scala object对象的方法都是静态方法 接下来 我们看下 apply是如何使用的 当 val applyTest = new ApplyTest() 会导致apply方法的调用并返回该方法调用的值,也就是ApplyTest的实例化对象 Class中也可以由apply方法,其使用方法如下所示: 由于 object中的方法和属性都是静

JavaScript学习笔记(1))——————call,apply方法

学习前端也有一段时间了,但是效果甚微.利用时间不够充分,虽然是利用工作之余来学习.但是这不能成为我的借口. 今天学习了(其实看了很多遍)call apply方法. function abc(a,b){ return a + b; } function call1(num1,num2){ return abc.call(this,num1,num2); //call方法传递的参数方式为一个一个传递 } function apply1(num1,num2){ return abc.apply(thi

scala的apply方法

package cn.itcast /** * Created by lishas on 2016/8/22. */object ApplyDemo { def apply(): Unit ={ println("apply invoked") } def apply(name:String):String={ name } def apply(name:Int):Int={ println("Int") name } def main(args: Array[St

scala 基础十二 scala apply的使用,工厂方法和单例模式的实现

1. apply 可以用来实现类似于静态的初始化类的实例,请看下面实例 package smart.iot class applyclass { } class A { def apply()=println("hello class A"); } object B { def apply()=println("hello object B"); } object applyRun { def main(args: Array[String]): Unit = {

Js apply 方法 具体解释

Js apply方法具体解释 我在一開始看到javascript的函数apply和call时,很的模糊,看也看不懂,近期在网上看到一些文章对apply方法和call的一些演示样例,总算是看的有点眉目了,在这里我做例如以下笔记,希望和大家分享..  如有什么不正确的或者说法不明白的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.        apply和call的差别在哪里 2.        什么情况下用apply,什么情况下用call 3.        ap

深入学习JavaScript: apply 方法 详解(转)——非常好

摘自:http://blog.csdn.net/qianzai5765638/article/details/6952321 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享..  如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.        apply和call的区别在哪里 2