scala reflection-Mirrors,ClassTag,TypeTag and WeakTypeTag

    反射reflection是程序?qū)ψ陨淼臋z查、驗(yàn)證甚至代碼修改功能。反射可以通過它的Reify功能來實(shí)時(shí)自動(dòng)構(gòu)建生成靜態(tài)的Scala實(shí)例如:類(class)、方法(method)、表達(dá)式(expression)等?;蛘邉?dòng)態(tài)跟蹤當(dāng)前程序運(yùn)算事件如:方法運(yùn)算(method invocation)、字段引用(field access)等。反射又分編譯時(shí)段與運(yùn)算時(shí)段反射即:compile-time-reflection及runtime-reflection。我們使用compile-time-reflection在編譯程序時(shí)指導(dǎo)編譯器修改編譯中代碼或者產(chǎn)生新的代碼,用runtime-reflection來進(jìn)行實(shí)例的類型匹配、驗(yàn)證等。在v2.10之前,Scala沒有自備的Reflection工具庫(kù),只能用Java Reflection庫(kù)提供的部分功能來動(dòng)態(tài)檢驗(yàn)類型(class)或?qū)ο螅╫bject)及使用它們的字段(member access)。但java-reflection無法提供對(duì)某些scala項(xiàng)目的支持如:function、trait以及特殊類型如:existential、high-kinder、path-dependent、abstract types。特別是java-reflection無法獲取泛類型在runtime過程中的信息,這個(gè)一直是一個(gè)詬病。直到scala2.10增加了新的reflection庫(kù)才從根本上解決了針對(duì)scala特性的反射(refective)功能問題。scala-reflection同樣提供了compile-time-reflection和runtime-reflection。其中compile-time-reflection是通過獨(dú)立的macro庫(kù)實(shí)現(xiàn)的。在這篇討論里我們主要介紹runtime-reflection功能。

scala runtime-reflection有以下幾項(xiàng)主要功能:

1、動(dòng)態(tài)檢驗(yàn)對(duì)象類型,包括泛類型

2、實(shí)時(shí)構(gòu)建類型實(shí)例

3、實(shí)時(shí)調(diào)用類型的運(yùn)算方法

反射功能可以在兩種環(huán)境下體現(xiàn):compile-time及runtime,是通過反射庫(kù)的universe命名空間分辨的,即:

runtime-reflection     : scala.reflect.runtime.universe

compile-time-reflection: scala.reflect.macros.universe

我們必須import相應(yīng)的命名空間來獲取compile-time或runtime反射功能。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式