Scala中ClassTag 、Manifest、ClassManifest、TypeTag的关系

来源:互联网 发布:电子书编辑软件下载 编辑:程序博客网 时间:2024/06/14 22:09
在Scala中应用了大量的数组,按照Scala的语法来说是不能创建泛型数组,因为Scala编译时必须要确定它的类型,否则编译都不能通过,但是Scala中引入了Manifest,Manifest可以有效解决这个问题
如下图:





注:如上图中:
当调用方法传递参数执行时,ClassTag会把参数类型记住,其实ClassTag就是隐式值,将类型传递给T,这就是隐式转换最重要的工作

Manifest(上下文界定)特点:
1、Array在Scala中是一个原生的数组,所以编译时并不会有过多的辅助的处理
2、通过Manifest可以创建Array泛型类型的创建,即可以帮助Array提供确认泛型的类型(这就是隐式值)
3、Manifest会存储运行时实际的类型,然后运行时作为参数传递
4、泛型类型在运行时具体的类型是看不到的,被抹掉了
5、隐式是一个难点、重点,隐式是自动判断类型,且进行传递的一个过程

ClassManifest:
和Manifest具有相同的作用,但是获取信息方面比Manifest弱一些

ClassTag :
1、在Spark中的实际编码中ClassTag用的比较频繁,在隐式转换中具有非常重要的作用
2、ClassTag最重要的也是指定在运行时泛型的类型(编译时无法识别的type)


综合比较:
1、Manifest有一些弱点,在判断指定路径方面的class的类型时会出现有误,所以用ClassTag代替Manifest,用TypeTag代替ClassManifest
2、TypeTag要比ClassTag更加强大(在实际应用中ClassTag更加广泛)
3、所有在JVM上运行的泛型的类型是被抹掉的,虚拟机根本不知道是什么类型
4、在实际的开发中经常使用上面截图中的第一种方式应用泛型类,但在实际的编译中会形成第二种的方式运行
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 闸坡海景酒店 闸坡保利皇冠假日酒店 闸坡住宿攻略 阳江闸坡旅游攻略 闸坡门票多少钱 闸坡旅游路线 闸坡旅游团购 闸坡大角湾沙滩 闸坡大角湾旅游 闸坡风帆度假公寓 闸坡特色美食 闸坡旅游景点大全 闸坡海上乐园门票 闸坡哪家酒店好 闸坡哪里吃海鲜便宜 闸坡度假公寓 闸坡门票多少 阳光闸坡大角湾 闸坡车站电话 闸坡碧涛园度假公寓 闸坡哪里吃饭好 闸坡天港宾馆 闸坡阳光半岛酒店 闸坡阳光半岛 闸坡海晖大酒店 闸波旅游攻略 阳江闸波 门闸机 闸机尺寸 三滚闸机 停车场闸机 机闸一体式闸门厂家 闸阀启闭机 电动道闸机 闸机通道 闸机价格 闸机图片 自动闸机 隔夜大闸蟹可以吃吗 闸蟹怎么吃 大大闸蟹吃法