好程序员大数据学习路线分享Scala系列之对象
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,好程序员大数据学习路线为大家分享Scala系列之对象1. 单例对象在Scala中没有静态方法和静态字段,但是可以使用object这个语法结构来达到同样的目的1.scala类似于Java中的工具类,可以
千家信息网最后更新 2025年12月01日好程序员大数据学习路线分享Scala系列之对象
好程序员大数据学习路线为大家分享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 { 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.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")val customer1ID = CustomerID("Sukyoung") // Sukyoung--23098234908customer1ID match { //调用unapply方法,提取name信息 case CustomerID(name) => println(name) // prints Sukyoung case _ => println("Could not extract a CustomerID")}
对象
方法
程序
参数
工具
实例
静态
信息
关键
关键字
函数
功能
应用程序
模式
源文件
类名
应用
私有
数据
程序员
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云服务器开传奇行吗
某台服务器一直ogi
牛津数据库怎么看
龙族幻想手游服务器不通知
忘川风华录祖龙吟服务器
珠海星宇众网络技术有限公司
丰台区管理软件开发怎么样
幼师网络安全知识培训心得体会
张掖网络安全和信息部姜文
debian当服务器
东营高校党建软件开发公司
网络安全关键是人才
青少年网络安全知识调查报告
计算机网络技术发展职位
香肠派对哪个服务器更简单
北京美瑞恒信网络技术
计算机数据库技术教程
苏州大数据软件开发靠谱吗
公安部网络安全保卫局1
软件开发专业的电脑配置
音频网络技术
网络技术对艺术传统的冲击
怎么开发个app软件开发
域名怎么绑定ecs服务器
如何远程管理神力科莎服务器
软件开发前端用什么
安徽项目软件开发费用
国家网络安全宣
郑州网络安全培训机构简单易学
美国首部网络安全法案