好程序员大数据

好程序员大数据培训为大家分享Scala系列之对象

2019-10-09  本文已影响0人  ab6973df9221

好程序员大数据培训为大家分享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.infoclass Project(name: String, daysToComplete: Int)class Test {  valproject1 = new Project("TPS Reports", 1)  valproject2 = 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 varlastNumber = 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 varlastNumber = 0  private def apply(arg :Int) = {    lastNumber = arg*2+ 1; lastNumber  }  def main(args: Array[String]) {    println(AccountInfo(1))  }}

4. 应用程序对象

Scala程序都必须从一个对象的main方法开始,可以通过扩展App特质,不写main方法。

objectHello extends  App{  println("Hello World")}

object Hello {  def main(args: Array[String]): Unit = {    println("Hello World")  }}

5.提取器

带有unapply方法的对象,经常用在模式匹配或者偏函数中。

import scala.util.Randomobject 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")valcustomer1ID = CustomerID("Sukyoung")  // Sukyoung--23098234908customer1ID match {    //调用unapply方法,提取name信息  case CustomerID(name) => println(name)  // prints Sukyoung  case_ => println("Could not extract a CustomerID")}

好程序员大数据培训官网:http://www.goodprogrammer.org/bigdata.shtml

上一篇下一篇

猜你喜欢

热点阅读