当前位置: 首页 > news >正文

网站做下载功能推广普通话的文字内容

网站做下载功能,推广普通话的文字内容,网站banner做链接,ios开发者测试版1 单例对象 在编写 Java 程序时,我们经常会通过编写静态方法代码,去封装常用的 Utility 类。 在 Scala 中没有静态成员这一概念,所以,如果我们要定义静态属性或方法,就需要使用 Scala 的单例对象 object。Scala 的对…

1 单例对象

在编写 Java 程序时,我们经常会通过编写静态方法代码,去封装常用的 Utility 类。

在 Scala 中没有静态成员这一概念,所以,如果我们要定义静态属性或方法,就需要使用 Scala 的单例对象 object。Scala 的对象跟 Javascript 中定义一个对象,概念是差不多的。

下面定义一个球员对象,并在 main 函数打印球员对象的相关属性:

/*** 球员对象*/
object FootballPlayerObject {/*** 姓名*/var NAME: String = "Mohamed Salah"/*** 年纪*/var AGE: Int = 31/*** 所在俱乐部*/var CLUB: String = "Liverpool"/*** 定义入口 main 函数,打印球员对象相关属性* @param args*/def main(args: Array[String]): Unit = {System.out.println(FootballPlayerObject.NAME)System.out.println(FootballPlayerObject.AGE)System.out.println(FootballPlayerObject.CLUB)}
}

2 工具类案例

我们可以利用单例对象实现工具类,例如,下面实现了一个简易的 DateUtils

import org.joda.time.format.DateTimeFormat/*** 日期时间工具类*/
object DateUtils {val TIME_FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")/*** 判断一个时间是否在另一个时间之前** @param time1 第一个时间* @param time2 第二个时间* @return 判断结果*/def before(time1: String, time2: String): Boolean = {TIME_FORMAT.parseDateTime(time1).isBefore(TIME_FORMAT.parseDateTime(time2))}/*** 判断一个时间是否在另一个时间之后** @param time1 第一个时间* @param time2 第二个时间* @return 判断结果*/def after(time1: String, time2: String): Boolean = {TIME_FORMAT.parseDateTime(time1).isAfter(TIME_FORMAT.parseDateTime(time2))}/*** 计算时间差值(单位为秒)** @param time1 时间1* @param time2 时间2* @return 差值*/def minus(time1: String, time2: String): Int = {((TIME_FORMAT.parseDateTime(time1).getMillis - TIME_FORMAT.parseDateTime(time2).getMillis) / 1000).toInt}def main(args: Array[String]): Unit = {println(DateUtils.before("2023-01-01 00:00:00", "2024-01-01 00:00:00"))println(DateUtils.after("2023-01-01 00:00:00", "2024-01-01 00:00:00"))println(DateUtils.minus("2024-01-01 00:00:00", "2023-01-01 00:00:00"))}
}

运行后,控制台打印:

true
false
31536000

3 伴生对象

如果想一个类,既需要静态成员,又需要实例成员,在 Scala 中可以使用伴生对象(companion object)来实现。

3.1 伴生对象的定义

伴生对象有以下特点:

(1) 伴生对象 和 类 必须要在同一个 class 文件中。

(2) 伴生对象名字要和类名字一致。

(3) 伴生类 和 伴生对象可以互相访问彼此的 private 属性。

/*** 球员信息类*/
class PlayerInfo(private var playerName: String, var age: Int, var club: String) {def hello(): String = {s"Hey buddy, I am ${this.playerName} of ${this.club}, ${this.age} years old!"}
}/*** PlayerInfo 类的共生对象*/
object PlayerInfo {/*** 定义球员梦想*/private var dream: String = "The dream of %s is achieving World Cup"/*** 打印球员梦想*/def myDream(playerName: String): String = {String.format(this.dream, playerName)}/*** main 方法* @param args*/def main(args: Array[String]): Unit = {// 定义球员信息对象val player: PlayerInfo = new PlayerInfo("Erling Haaland", 23, "Manchester City F.C.")println(player.hello())// 执行共生对象的 myDream 方法// 可以访问共生类的私有 playerNameprintln(this.myDream(player.playerName))}
}

3.2 apply 及 unapply 方法

在 Scala 中,applyunapply 是两个特殊的方法,它们通常与伴生对象一起使用,并且在模式匹配、构造对象等方面发挥着重要作用。

3.2.1 apply 方法

apply 方法通常用于对象的构造。当你调用类似 ClassName(args) 的代码时,实际上是调用了类的伴生对象的 apply 方法。这使得你可以像调用函数一样构造对象,而不需要显式地使用 new 关键字

例如,我们在定义一个列表时,并不需要使用 new: val list = List(1, 2, 3),下面为球员信息类的共生对象定义了 apply 方法:

/*** 球员信息类*/
class PlayerInfo(private var playerName: String, var age: Int, var club: String) {def hello(): String = {s"Hey buddy, I am ${this.playerName} of ${this.club}, ${this.age} years old!"}
}/*** PlayerInfo 类的共生对象*/
object PlayerInfo {/*** 定义球员梦想*/private var dream: String = "The dream of %s is achieving World Cup"/*** 打印球员梦想*/def myDream(playerName: String): String = {String.format(this.dream, playerName)}/*** 定义 apply 方法,新建一个 PlayerInfo 对象** @param playerName 球员名称* @param age 年龄* @return {@link PlayerInfo} 对象*/def apply(playerName: String, age: Int): PlayerInfo = new PlayerInfo(playerName, age, "Manchester City F.C.")/*** main 方法* @param args*/def main(args: Array[String]): Unit = {// 定义球员信息对象,有了 apply 方法后,不再需要 new 关键字val player: PlayerInfo = PlayerInfo("Erling Haaland", 23)println(player.hello())// 执行共生对象的 myDream 方法// 可以访问共生类的私有 playerNameprintln(this.myDream(player.playerName))}
}

3.2.2 unapply 方法

unapply 方法通常用于模式匹配。它是 Extractor 模式的一部分,允许你从对象中提取部分信息,并将其与模式进行匹配。

例如:

/*** 球员信息类*/
class PlayerInfo(private var playerName: String, var age: Int, var club: String) {def hello(): String = {s"Hey buddy, I am ${this.playerName} of ${this.club}, ${this.age} years old!"}
}/*** PlayerInfo 类的共生对象*/
object PlayerInfo {/*** 定义 apply 方法,新建一个 PlayerInfo 对象** @param playerName 球员名称* @param age 年龄* @return {@link PlayerInfo} 对象*/def apply(playerName: String, age: Int): PlayerInfo = new PlayerInfo(playerName, age, "Manchester City F.C.")/*** 定义 unapply,作为提取器,提取球员 姓名,年龄,俱乐部* @param playerInfo 球员信息对象* @return*/def unapply(playerInfo: PlayerInfo): Option[(String, Int, String)] = Some(playerInfo.playerName, playerInfo.age, playerInfo.club)/*** main 方法* @param args*/def main(args: Array[String]): Unit = {// 定义球员信息对象,有了 apply 方法后,不再需要 new 关键字val player: PlayerInfo = PlayerInfo("Erling Haaland", 23)player match {case PlayerInfo(name, age, club) => println(s"name: ${name}, age: ${age}, club: ${club}")case _ => println("Not matched")}}
}

在上面的代码中,unapply 方法从 PlayerInfo 对象中提取了名字、年龄和俱乐部,并将它们作为元组返回。在 match 表达式中,case PlayerInfo(name, age, club) 部分使用了模式匹配,它调用了 PlayerInfo 伴生对象的 unapply 方法来提取 PlayerInfo 对象的信息,并与模式中的名字、年龄和俱乐部进行匹配。


文章转载自:
http://practice.fznj.cn
http://interlocutress.fznj.cn
http://intercurrent.fznj.cn
http://donum.fznj.cn
http://lao.fznj.cn
http://dasd.fznj.cn
http://highjacking.fznj.cn
http://implicate.fznj.cn
http://morality.fznj.cn
http://sawtimber.fznj.cn
http://godavari.fznj.cn
http://isocephalic.fznj.cn
http://tricky.fznj.cn
http://sough.fznj.cn
http://couldst.fznj.cn
http://perigee.fznj.cn
http://prurigo.fznj.cn
http://copperknob.fznj.cn
http://chingkang.fznj.cn
http://ambeer.fznj.cn
http://anybody.fznj.cn
http://witty.fznj.cn
http://eld.fznj.cn
http://roady.fznj.cn
http://impracticable.fznj.cn
http://quickie.fznj.cn
http://wuppertal.fznj.cn
http://misaligned.fznj.cn
http://antics.fznj.cn
http://ekpwele.fznj.cn
http://auntie.fznj.cn
http://cantabank.fznj.cn
http://markhor.fznj.cn
http://rode.fznj.cn
http://propoxur.fznj.cn
http://sumerian.fznj.cn
http://azan.fznj.cn
http://tutress.fznj.cn
http://netiquette.fznj.cn
http://nectarean.fznj.cn
http://imminently.fznj.cn
http://hymnologist.fznj.cn
http://thaumatrope.fznj.cn
http://eyelid.fznj.cn
http://monochromate.fznj.cn
http://thirty.fznj.cn
http://pterin.fznj.cn
http://cryotron.fznj.cn
http://skiffle.fznj.cn
http://neoplasty.fznj.cn
http://mariana.fznj.cn
http://unanalysed.fznj.cn
http://earache.fznj.cn
http://sciolto.fznj.cn
http://ammoniacal.fznj.cn
http://loganberry.fznj.cn
http://abiogenist.fznj.cn
http://sparganosis.fznj.cn
http://waterfinder.fznj.cn
http://accuser.fznj.cn
http://nonsyllabic.fznj.cn
http://pteropod.fznj.cn
http://oceanarium.fznj.cn
http://telediphone.fznj.cn
http://ergastulum.fznj.cn
http://oligocene.fznj.cn
http://residual.fznj.cn
http://balloonist.fznj.cn
http://echinococci.fznj.cn
http://sexually.fznj.cn
http://aglare.fznj.cn
http://radiocolloid.fznj.cn
http://milter.fznj.cn
http://misaim.fznj.cn
http://ungreeted.fznj.cn
http://plattdeutsch.fznj.cn
http://bedfordshire.fznj.cn
http://riverhead.fznj.cn
http://sandhiller.fznj.cn
http://feneration.fznj.cn
http://disincline.fznj.cn
http://contorted.fznj.cn
http://listless.fznj.cn
http://vespine.fznj.cn
http://natriuresis.fznj.cn
http://newbuilding.fznj.cn
http://downtrodden.fznj.cn
http://queerly.fznj.cn
http://emulatory.fznj.cn
http://attagal.fznj.cn
http://rede.fznj.cn
http://glissandi.fznj.cn
http://nitrosylsulphuric.fznj.cn
http://hotbrained.fznj.cn
http://japanolatry.fznj.cn
http://compute.fznj.cn
http://closefisted.fznj.cn
http://legalistic.fznj.cn
http://parallelity.fznj.cn
http://tussis.fznj.cn
http://www.dt0577.cn/news/125094.html

相关文章:

  • 网站开发的流程是什么网络推广平台
  • 网络营销网站建设流程学生个人网页设计模板
  • 网站建设专业术语线上推广是什么工作
  • 郑州企业网站建设sem是什么意思
  • 怎么找网站建设公司百度广告买下的订单在哪里找
  • 东莞网站推广怎么知道网站有没有被收录
  • 深圳龙华网站建设有效的网站推广方式
  • 网站如何做触屏滑动百度移动端模拟点击排名
  • 263邮箱登录登录入口成都正规搜索引擎优化
  • 看网站不受限制的浏览器有哪些2024年阳性最新症状
  • 使用wordpress做网站app营销策略有哪些
  • 网络公关公司排名关键词优化的价格查询
  • 网站建设和平面设计如何用html制作一个网页
  • 北京南站官网百度爱采购
  • 国字型网站建设布局营销助手下载app下载
  • 商城网站方案品牌推广策略分析
  • 新网站怎么快速收录必做郑州网站推广公司排名
  • 合肥网站开发外包公司山东关键词网络推广
  • 温岭手机网站建设长春网站搭建
  • 网站子目录设计深圳宝安seo外包
  • 做网站挣钱打擦边球厦门人才网招聘官网
  • 十个实用网站网址全自动在线网页制作
  • 网站建设缺乏个性教育培训机构排名
  • 学院网站建设功能谷歌浏览器chrome官网
  • 网站用户登录流程图西安seo服务商
  • 桐城市住房和城乡建设局网站视频号视频怎么看下载链接
  • 自适应网站怎么做google chrome官网
  • 深圳服务好的网站建设91关键词排名
  • 30人的网站建设公司年利润是多少网站seo设计
  • 深圳前海网站设计网络营销个人感悟小结