成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

scala的單例對象是什么

本篇內(nèi)容介紹了“scala的單例對象是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

鹽田ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

單例對象是一種特殊的類,有且只有一個實例。和惰性變量一樣,單例對象是延遲創(chuàng)建的,當(dāng)它第一次被使用時創(chuàng)建。

當(dāng)對象定義于頂層時(即沒有包含在其他類中),單例對象只有一個實例。

當(dāng)對象定義在一個類或方法中時,單例對象表現(xiàn)得和惰性變量一樣。

一個單例對象是就是一個值。單例對象的定義方式很像類,但是使用關(guān)鍵字 object

object Box

下面例子中的單例對象包含一個方法:

package logging
object Logger {  def info(message: String): Unit = println(s"INFO: $message")}

方法 info 可以在程序中的任何地方被引用。像這樣創(chuàng)建功能性方法是單例對象的一種常見用法。

下面讓我們來看看如何在另外一個包中使用 info 方法:

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")  }

因為 import 語句 import logging.Logger.info,方法 info 在此處是可見的。

import語句要求被導(dǎo)入的標(biāo)識具有一個“穩(wěn)定路徑”,一個單例對象由于全局唯一,所以具有穩(wěn)定路徑。

注意:如果一個 object 沒定義在頂層而是定義在另一個類或者單例對象中,那么這個單例對象和其他類普通成員一樣是“路徑相關(guān)的”。這意味著有兩種行為,class Milkclass OrangeJuice,一個類成員 object NutritionInfo “依賴”于包裝它的實例,要么是牛奶要么是橙汁。milk.NutritionInfo 則完全不同于oj.NutritionInfo。

伴生對象

當(dāng)一個單例對象和某個類共享一個名稱時,這個單例對象稱為 伴生對象。同理,這個類被稱為是這個單例對象的伴生類。類和它的伴生對象可以互相訪問其私有成員。使用伴生對象來定義那些在伴生類中不依賴于實例化對象而存在的成員變量或者方法。

import scala.math._
case class Circle(radius: Double) {  import Circle._  def area: Double = calculateArea(radius)}
object Circle {  private def calculateArea(radius: Double): Double = Pi * pow(radius, 2.0)}
val circle1 = Circle(5.0)
circle1.area

這里的 class Circle 有一個成員 area 是和具體的實例化對象相關(guān)的,單例對象 object Circle 包含一個方法 calculateArea ,它在每一個實例化對象中都是可見的。

伴生對象也可以包含工廠方法:

class Email(val username: String, val domainName: String)
object Email {  def fromString(emailString: String): Option[Email] = {    emailString.split('@') match {      case Array(a, b) => Some(new Email(a, b))      case _ => None    }  }}
val scalaCenterEmail = Email.fromString("scala.center@epfl.ch")scalaCenterEmail match {  case Some(email) => println(    s"""Registered an email       |Username: ${email.username}       |Domain name: ${email.domainName}     """)  case None => println("Error: could not parse email")}

伴生對象 object Email 包含有一個工廠方法 fromString 用來根據(jù)一個 String 創(chuàng)建 Email 實例。在這里我們返回的是 Option[Email] 以防有語法分析錯誤。

注意:類和它的伴生對象必須定義在同一個源文件里。如果需要在 REPL 里定義類和其伴生對象,需要將它們定義在同一行或者進入 :paste 模式。

Java 程序員的注意事項

在 Java 中 static 成員對應(yīng)于 Scala 中的伴生對象的普通成員。

在 Java 代碼中調(diào)用伴生對象時,伴生對象的成員會被定義成伴生類中的 static 成員。這稱為 靜態(tài)轉(zhuǎn)發(fā)。這種行為發(fā)生在當(dāng)你自己沒有定義一個伴生類時。

“scala的單例對象是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

網(wǎng)站題目:scala的單例對象是什么
新聞來源:http://jinyejixie.com/article20/pgicco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站設(shè)計網(wǎng)站維護、響應(yīng)式網(wǎng)站網(wǎng)站設(shè)計公司、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
兴化市| 玉门市| 繁昌县| 简阳市| 孝义市| 奈曼旗| 灯塔市| 车致| 安陆市| 合川市| 合川市| 汤阴县| 民县| 海盐县| 武安市| 金沙县| 安达市| 同仁县| 建昌县| 和田县| 诸暨市| 玉环县| 贵定县| 饶河县| 新邵县| 北川| 珠海市| 汉中市| 泊头市| 兰溪市| 勃利县| 临颍县| 方城县| 武穴市| 定南县| 湖北省| 五河县| 灵寿县| 宜兰县| 蓬安县| 彭泽县|