快学scala笔记——对象



Published:

09 Aug 2016


Category:


scala

  • scala没有静态字段或静态方法,可以用object语法结构达到同样的目的
object Accounts {
    private var lastNumber = 0
    def newUniqueNumber() = {
        lastNumber += 1;
        lastNumber
    }
}
  • 对象的构造器在该对象第一次被使用时调用,如Accounts.newUniqueNumber()首次调用时执行构造器,如果一个对象从未被使用,那么构造器也不会执行

  • 对象的本质上可以拥有类的所有特性,甚至可以扩展其他类或特质

  • 只有一个例外,不能提供构造器参数

  • java中,类可以有实例方法又可以有静态方法。在scala中,可以通过类和与类同名的伴生对象达到目的

class Account {
    val id = Account.newUniqueNumber()
    private var balance =  0.0
    def deposit(amount: Double) {
        balance += amount
    }
}

object Account { //伴生对象
    private var lastNumber = 0
    def newUniqueNumber() = {
        lastNumber += 1;
        lastNumber
    }
}
  • 类和它的伴生对象可以相互访问私有特性,但必须在同一个源文件中

  • 类的伴生对象可以被访问,但并不在作用域当中,必须通过Account.newUniqueNumber()而不是直接用newUniqueNumber()

  • 对象的apply方法,当遇到Object(参数1,…,参数N),apply方法就会被调用

class Account private (val id: Int, initialBalance: Double) {
    private var balance = initialBalance
    ...
}

object Account { //伴生对象
    def apply(initialBalance: Double) =
        new Account(newUniqueNumber(),initialBalance)

    ...
}
  • 这样就可以用val acct = Account(1000.0)构造了

  • 应用程序对象

object Hello {

    def main(args: Array[String]) {
        //doWork
    }
}
  • 扩展App特质
object Hello extends App {
    //doWork
}

//命令行参数通过args获取
object Hello extends App {
    if (args.length > 0)
        //doWork
    else
        //doWork
}

原文 

http://9leg.com/scala/2016/08/09/scala-for-the-impatient-07.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 快学scala笔记——对象

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址