日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scala _09样例类(case classes)隐式转换

發布時間:2024/2/28 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scala _09样例类(case classes)隐式转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

樣例類(case classes)

  • 概念理解

使用了case關鍵字的類定義就是樣例類(case classes),樣例類是種特殊的類。實現了類構造參數的getter方法(構造參數默認被聲明為val),當構造參數是聲明為var類型的,它將幫你實現setter和getter方法。

  • 樣例類默認幫你實現了toString,equals,copy和hashCode等方法。
  • 樣例類可以new, 也可以不用new
    • 例子:結合模式匹配的代碼
    package com.henu.scala12caseclassesAndimplicitcase class Person(name:String,age:Int)object CaseClassScalaDemo {def main(args: Array[String]): Unit = {val p1 = new Person("George",22)val p2 = new Person("kk",age = 20)val p3 = new Person("honey",age = 18)println(p1)println(p3)println(p1)val list = List(p1,p2,p3)list.foreach(x =>{x match {case Person("George",22) => println("George")case Person("kk",20) => println("kk")case _=> println("no match")}})} }

    隱式轉換

    隱式轉換是在Scala編譯器進行類型匹配時,如果找不到合適的類型,那么隱式轉換會讓編譯器在作用范圍內自動推導出來合適的類型。

    • 隱式值與隱式參數

    隱式值是指在定義參數時前面加上implicit。隱式參數是指在定義方法時,方法中的部分參數是由implicit修飾【必須使用柯里化的方式,將隱式參數寫在后面的括號中】。隱式轉換作用就是:當調用方法時,不必手動傳入方法中的隱式參數,Scala會自動在作用域范圍內尋找隱式值自動傳入。

    隱式值和隱式參數注意:

    1). 同類型的參數的隱式值只能在作用域內出現一次,同一個作用域內不能定義多個類型一樣的隱式值。

    ? ? ? 2). implicit 關鍵字必須放在隱式參數定義的開頭

    ? ? ? 3). 一個方法只有一個參數是隱式轉換參數時,那么可以直接定義implicit關鍵字修飾的參數,調用時直接創建類型不傳入參數即可。

    4). 一個方法如果有多個參數,要實現部分參數的隱式轉換,必須使用柯里化這種方式,隱式關鍵字出現在后面,只能出現一次

    package com.henu.scala12caseclassesAndimplicitobject ImpliciScalaDemo {def Student(age:Int)(implicit name:String,i:Int)={println(s"student : $name , age = $age, score = $i")}def Teacher(implicit name:String): Unit ={println(s"teacher name is : $name")}def main(args: Array[String]): Unit = {implicit val dd = "george"implicit val ddd = 100Student(22)Teacher} }
    • 隱式轉換函數

    隱式轉換函數是使用關鍵字implicit修飾的方法。當Scala運行時,假設如果A類型變量調用了method()這個方法,發現A類型的變量沒有method()方法,而B類型有此method()方法,會在作用域中尋找有沒有隱式轉換函數將A類型轉換成B類型,如果有隱式轉換函數,那么A類型就可以調用method()這個方法。

    隱式轉換函數注意:隱式轉換函數只與函數的參數類型和返回類型有關,與函數名稱無關,所以作用域內不能有相同的參數類型和返回類型的不同名稱隱式轉換函數。

    package com.henu.scala12caseclassesAndimplicitobject ImpliciFunDemo {implicit def rabbitToAnimal(rabbit: Rabbit):Animal = {new Animal(rabbit.name)}def main(args: Array[String]): Unit = {val rabbit = new Rabbit("george")rabbit.canFly()} } class Animal(name:String){def canFly() ={println(s"$name can fly!")} } class Rabbit(xname:String){val name = xname }
    • 隱式類

    使用implicit關鍵字修飾的類就是隱式類。若一個變量A沒有某些方法或者某些變量時,而這個變量A可以調用某些方法或者某些變量時,可以定義一個隱式類,隱式類中定義這些方法或者變量,隱式類中傳入A即可。

    隱式類注意:

    ? ?1).隱式類必須定義在類,包對象,伴生對象中。

    2).隱式類的構造必須只有一個參數,同一個類,包對象,伴生對象中不能出現同類型構造的隱式類。

    package com.henu.scala12caseclassesAndimplicitclass Rabbit(s:String){val name = s }object ImplicitClass {implicit class Animal(rabbit: Rabbit){val tp = "Animal"def canFly() = {println(rabbit.name + " can fly...")}}def main(args: Array[String]): Unit = {val rabbit = new Rabbit("rabbit")rabbit.canFly()println(rabbit.tp)} }

    ?

    總結

    以上是生活随笔為你收集整理的Scala _09样例类(case classes)隐式转换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。