好程序员大数据学习路线分享Scala系列之对象
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,好程序员大数据学习路线为大家分享Scala系列之对象1. 单例对象在Scala中没有静态方法和静态字段,但是可以使用object这个语法结构来达到同样的目的1.scala类似于Java中的工具类,可以
千家信息网最后更新 2025年01月23日好程序员大数据学习路线分享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安全错误
数据库的锁怎样保障安全
品质网络技术服务
网络安全的第一屏障是
计算机网络技术和数学有关吗
三星网络安全问题
腾讯数据库为什么都建在山里
读取文件放入数据库
计算机三级数据库考试真题
服务器流量多少
vs添加服务器
网络安全引起的重大事件
网络安全部署规划
泰州海航软件开发常见问题
学习软件开发的人才
怎么搭建静态ip服务器
zigbee数据库
中国网络安全军民融合
lol比赛服务器
软件开发项目生存期
1.8饥饿游戏服务器
雄狮服务器
苹果登陆id连接服务器超时出错
网络安全工作责任清单业主部门
王兴互联网it 科技
新天龙八部服务器爆满
家庭教育和网络安全手抄报
软考网络安全考几次
淄博生产软件开发服务
网络安全知识漫画版
数据库不同备份语句
用数据库软件设计数据库难吗