scala學習筆記10 隱式類

2021-10-02 14:56:39 字數 2418 閱讀 6771

隱式類

在scala2.10之後開始提供了隱式類,可以使用implicit宣告類,可以擴充套件類的功能

def main

(args: array[string]

): unit =

//定義eat方法

} var b1 =

newbird()

b1.fly(

)//呼叫類中的方法

b1.eat(

)//呼叫隱式類中的方法

}class

bird()

//定義fly方法

}println

("-------定義字串拼接方法---------"

)//為stirng型別定義乙個方法:實現字串的拼接

implicit class

strpj

(val s:string)

} var s:string =

"我是"

println

(s.pj

("小明").

pj("職業是飛行員"))

//我是小明職業飛行員

當程式呼叫某乙個方法的時候,如果在內部找不到對應的方法,那麼就會去找隱式轉換的處理函式

如果有隱式轉換函式,同時還有乙個對應的普通函式,那麼會呼叫哪乙個?

會先找內部自己的普通函式

object yinshilei02 

//當say方法中傳入不是person型別的引數的時候,將會報錯

//scala中使用隱式轉換可以解決

def say

(p:person)

=//使用隱式類的方式可以將傳入的obj型別轉換為person型別

implicit def objtoperson

(obj:object)

:person =

else

if(obj.getclass == classof[student]

)else

}class

person

(val name:string)

//person類

class

teacher

(val name:string)

//teacher類

class

student

(val name:string)

//student類

}

引入隱式轉換的操作

加強現有類的功能,並定義互相之間的隱式轉換,從而讓源類使用加強版的方法時,由scalat自動進行隱式轉換為加強類,然後再呼叫該方法

//引入隱式轉換的操作

import com.chensy.yinshilei.yinshilei03.

//建立隱式裝換工具類

object object_implicit

//通過匯入隱式轉換工具類包的方式,可以將spiderman類隱式的附加到person物件

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

--//匯入使用import 物件全路徑._

import com.chensy.yinshilei.object_implicit._

object yinshilei03

//採用隱式轉換,將乙個類的功能附加給另乙個類

// implicit def persontospiderman(p:person) : spiderman = new spiderman()

class

person()

// def skill()

}class

spiderman()

}}

隱式引數的使用

在函式或者方法中,定義乙個用implicit修改的引數,此時scala會嘗試找乙個指定型別的,用implicit修飾的物件,即隱式值,並注入引數

object yinshilei04 

//在man引數前加上implicit修飾:隱式引數

def method01

(name:string)

(implicit m:man)

: unit =

}class

man}

//隱式引數型別的伴生物件內的隱式值

object man

scala學習筆記 隱式轉換

使用implicit關鍵字宣告的帶有單個引數的函式,會自動運用,將值從一種型別轉換為另一種型別 implicit def fun num double int num.toint 1var num int 3.5 輸出4.5注意 隱式轉化與函式名無關,只與引數型別和返回值型別有關 隱式函式可以有多個...

scala學習筆記 隱式轉換和隱式引數

隱式轉換 隱式引數 示例 示例1 隱式轉換 object mypredef class richfile val file file object richfile 示例2 隱式轉換 class cclass a c c class b c c def writebook unit object a...

scala隱式引數 隱式函式 隱式類詳解

隱式函式 隱式類1 定義乙個普通變數,使用 implicit 關鍵字修飾,定義乙個函式呼叫這個變數當引數時,此時這個引數就被稱為隱式引數 2 隱式引數的作用 減少提供函式引數的數量,讓某些引數擁有隱藏的值 隱式變數 def main args array string unit def fun2 a...