大数据Scala系列之对象

简介: 大数据学习Scala系列之对象单例对象在Scala中没有静态方法和静态字段,但是可以使用object这个语法结构来达到同样的目的1.scala类似于Java中的工具类,可以用来存放工具函数和常量2.高效共享单个不可变的实例3.单例模式单例对象虽然类似于Java中的工具类,但它不是,还是一个对象,可以把单例对象名看做一个贴在对象上的标签。

大数据学习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应用程序的入口点。

  1. 伴生对象
    在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())

}

}

  1. 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))

}

}

  1. 应用程序对象
    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")
}

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
8月前
|
大数据 编译器 Scala
【大数据】初识Scala 2
【大数据】初识Scala
64 0
|
4月前
|
大数据 Scala
大数据生态思维导图____2021最新最全Scala语法思维导图!(待更新)
大数据生态思维导图____2021最新最全Scala语法思维导图!(待更新)
17 0
|
5月前
|
Scala
164 Scala 对象
164 Scala 对象
16 0
|
8月前
|
安全 大数据 Java
【大数据】初识Scala 4
【大数据】初识Scala
76 0
|
8月前
|
大数据 Java Scala
【大数据】初识Scala 3
【大数据】初识Scala
51 0
|
8月前
|
分布式计算 Java 大数据
【大数据】初识Scala 1
【大数据】初识Scala
63 0
|
大数据 Java Scala
大数据Scala系列之模式匹配和样例类
大数据Scala系列之模式匹配和样例类1.样例类在Scala中样例类是一中特殊的类,样例类是不可变的,可以通过值进行比较,可用于模式匹配。定义一个样例类:1.构造器中每一个参数都是val,除非显示地声明为var 2.
828 0
|
SQL 消息中间件 分布式计算
如何查看spark与hadoop、kafka、Scala、flume、hive等兼容版本【适用于任何版本】
如何查看spark与hadoop、kafka、Scala、flume、hive等兼容版本【适用于任何版本】
669 0
如何查看spark与hadoop、kafka、Scala、flume、hive等兼容版本【适用于任何版本】
|
2月前
|
分布式计算 Java Scala
spark 与 scala 的对应版本查看、在idea中maven版本不要选择17,弄了好久,换成11就可以啦
spark 与 scala 的对应版本查看、.在idea中maven版本不要选择17,弄了好久,换成11就可以啦
100 2
|
2月前
|
分布式计算 数据处理 Scala
Spark 集群和 Scala 编程语言的关系
Spark 集群和 Scala 编程语言的关系
29 0