ClassTag、Manifest、ClassManifest、TypeTag
點選(此處)摺疊或開啟
-
def main(args: Array[String]) {
-
- //從理論上講,建立一個泛型Array是不可能的,但是可以藉助Manifest實現
-
//用Manifest[T]的隱式值,儲存執行時T的資訊,在實際執行時,作為一個引數作用在方法執行的上下文中
-
def arrayMake[T : Manifest](first : T, second : T) = {
-
val r = new Array[T](2); r(0) = first; r(1) = second; r
-
}
-
arrayMake(1,2).foreach(println)
-
-
-
def mkArray[T : ClassTag](elems: T*) = Array[T](elems: _*)
-
mkArray(42, 13).foreach(println)
-
mkArray("Japan","Brazil","Germany").foreach(println)
-
-
def manif[T](x: List[T])(implicit m: Manifest[T]) = {//原生寫法,隱式引數
-
if (m <:< manifest[String])
-
println("List strings")
-
else
-
println("Some other type")
-
}
-
-
manif(List("Spark", "Hadoop")) //執行時,會傳入Manifest[String]隱式值
-
manif(List(1, 2))
-
manif(List("Scala", 3))
-
-
val m = manifest[A[String]]
-
println(m)
-
val cm = classManifest[A[String]]
-
println(cm)
- }
在Spark中使用最多的就是ClassTag,ClassTag原始碼註釋:
* A `ClassTag[T]` stores the erased class of a given type `T`, accessible via the `runtimeClass`
* field. This is particularly useful for instantiating `Array`s whose element types are unknown
* at compile time.
* ClassTag儲存T被擦出的class資訊,在不知道元素型別而初始化Array時特別有用
*
* `ClassTag`s are a weaker special case of [[scala.reflect.api.TypeTags#TypeTag]]s, in that they
* wrap only the runtime class of a given type, whereas a `TypeTag` contains all static type
* information. That is, `ClassTag`s are constructed from knowing only the top-level class of a
* type, without necessarily knowing all of its argument types. This runtime information is enough
* for runtime `Array` creation.
* ClassTag比TypeTag弱,它只包含執行時class資訊,TypeTag包含所有static型別資訊
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1973327/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Manifest 與TypeTag
- 離線儲存manifest
- Ant的Manifest任務
- LevelDb之manifest檔案
- not an rpm package (or package manifest):Package
- not an rpm package (or package manifest)Package
- Manifest中找不到versionCode?
- Include manifest for over-the-air installationAI
- HTML5 manifest離線快取HTML快取
- Butterknife(10.0.0):Manifest merger failed的坑AI
- SAP Commerce Cloud Build Manifest ComponentsCloudUI
- Android獲取Manifest中元素的值Android
- android manifest.xml 配置檔案 雜AndroidXML
- Android的Manifest配置檔案介紹Android
- 聊一聊 JAR 檔案和 MANIFEST.MFJAR
- SAP UI5 框架的 manifest.jsonUI框架JSON
- 聊一聊 H5 應用快取 - ManifestH5快取
- Android2.2 API 中文文件系列(4) —— ManifestAndroidAPI
- 【筆記】【Android】Manifest中的intent-filter使用筆記AndroidIntentFilter
- Android Manifest.xml檔案的結構及作用AndroidXML
- 我是怎樣讓網站用上HTML5 Manifest網站HTML
- Android知識點回顧之Manifest檔案-上篇Android
- Android知識點回顧之Manifest檔案-下篇Android
- The following instances are in the device manifest but not specified in framework compatibility matrix:devFramework
- HTML5離線儲存Manifest原理及使用詳解HTML
- Adaptive AUTOSAR 學習筆記 6 - 架構 - 方法論和 ManifestAPT筆記架構
- Adaptive AUTOSAR 學習筆記 7 - 應用設計和 ManifestAPT筆記
- ABAP的Packageinterface,安卓的manifest.xml和Kubernetes的CapabilitiesPackage安卓XML
- Nuxt.js 應用中的 build:manifest 事件鉤子詳解UXJSUI事件
- ABAP的Package interface, 安卓的manifest.xml和Kubernetes的CapabilitiesPackage安卓XML
- 解決Chrome外掛安裝時報錯:“Manifest file is missing or unreadable“Chrome
- CentOS 6.5安裝perl模組報錯'Can't locate ExtUtils/Manifest.pm'CentOS
- webpack build後生成的app、vendor、manifest三者有何職能不同?WebUIAPP
- 扣丁學堂HTML5開發manifest離線快取示例詳解HTML快取
- 【PWA學習與實踐】(2) 使用Manifest,讓你的WebApp更“Native”WebAPP
- Android學習之 主專案合併Library子專案中的ManifestAndroid
- SAP Fiori Elements 應用的 manifest.json 檔案執行時如何被解析的JSON
- 【Maven篇】---解決Maven線上部署java.lang.ClassNotFoundException和no main manifest attribute解決方法MavenJavaExceptionAI