好程序员大数据学习路线分享Scala系列之对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了好程序员大数据学习路线分享Scala系列之对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2861字,纯文字阅读大概需要5分钟。
内容图文
好程序员大数据学习路线为大家分享Scala系列之对象
1. 单例对象
在Scala中没有静态方法和静态字段,但是可以使用object这个语法结构来达到同样的目的
1.scala类似于Java中的工具类,可以用来存放工具函数和常量
2.高效共享单个不可变的实例
3.单例模式
单例对象虽然类似于Java中的工具类,但它不是,还是一个对象,可以把单例对象名看做一个贴在对象上的标签。
package logging
//使用关键字object定义单例对象
object Logger { def info(message: String): Unit = println(s"INFO: $message") }
单例对象的使用
//导入单例对象信息,使之在当前类可见
import logging.Logger.info class Project(name: String, daysToComplete: Int) class Test { val project1 = new Project("TPS Reports", 1) val project2 = new Project("Website redesign", 5) //调用单例对象中定义的方法 info("Created projects") // Prints "INFO: Created projects" }
类和单例对象的区别是,单例对象不能带参数,单例对象不能用new关键字实例化,所以没有机会传递给它实例化的参数。
单例对象在第一次访问的时候才会初始化。
当单例对象与某个类同名时,它被称为类的伴生对象,类和伴生对象必须定义在一个源文件里,类称为该单例对象的伴生类,类和他的伴生对象可以互相访问其私有成员。
不与伴生类共享名称的单例对象被称为独立对象,可以作为相关功能的工具类,或者scala应用程序的入口点。
2. 伴生对象
在Scala的类中,与类名相同并且用object修饰的对象叫做伴生对象,类和伴生对象之间可以相互访问私有的方法和属性,他们必须存在同一个源文件中
class AccountInfo { //类的伴生对象的功能特性并不在类的作用域 //所以不能直接用newUniqueNumber()调用伴生对象的方法 var id = AccountInfo.newUniqueNumber() } object AccountInfo { private var lastNumber = 0 private def newUniqueNumber() = { lastNumber += 1; lastNumber } def main(args: Array[String]) { //相当于Java中的静态方法调用 println(AccountInfo.newUniqueNumber()) } }
3. apply方法
通常我们会在类的伴生对象中定义apply方法,当遇到类名(参数1,...参数n)时apply方法会被调用
class AccountInfo { } object AccountInfo { private var lastNumber = 0 private def apply(arg :Int) = { lastNumber = arg*2 + 1; lastNumber } def main(args: Array[String]) { println(AccountInfo(1)) } }
4. 应用程序对象
Scala程序都必须从一个对象的main方法开始,可以通过扩展App特质,不写main方法。 object Hello extends App{ println("Hello World") } 同 object Hello { def main(args: Array[String]): Unit = { println("Hello World") } }
5.提取器
带有unapply方法的对象,经常用在模式匹配或者偏函数中。
import scala.util.Random object CustomerID { def apply(name: String) = s"$name--${Random.nextLong}" def unapply(customerID: String): Option[String] = { val name = customerID.split("--").head if (name.nonEmpty) Some(name) else None } } //调用apply方法创建一个对象,等价于CustomerID.apply("Sukyoung") val customer1ID = CustomerID("Sukyoung") // Sukyoung--23098234908 customer1ID match { //调用unapply方法,提取name信息 case CustomerID(name) => println(name) // prints Sukyoung case _ => println("Could not extract a CustomerID") }
内容总结
以上是互联网集市为您收集整理的好程序员大数据学习路线分享Scala系列之对象全部内容,希望文章能够帮你解决好程序员大数据学习路线分享Scala系列之对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。