46.ClassTag 、Manifest、ClassManifest、TypeTag代码实战及其在Spark中的应用源码解析
来源:互联网 发布:java数据库连接池写法 编辑:程序博客网 时间:2024/05/22 00:16
一、ClassTag 、Manifest、ClassManifest、TypeTag代码实战
package ce.scala.zhongobject Multiple_Bounds_46 { def main(args: Array[String]): Unit = { //常见写法(推荐) def arrayMake[T : Manifest](first : T, second : T) = { //创建泛型数组,理论上不可以,因为没有指定具体的类型。运行时,数组必须有具体的类型。 //Array只是Scala的一个普通的类,在虚拟机中,泛型相关的类型信息是被抹掉的。只会有一个arrayMake方法,却要处理所有类型T //Manifest来帮我们存储运行时的T的具体信息,实际运行时,作为参数用在方法运行的上下文中。当然这个是隐式的过程 //[T : Manifest]是Manifest上下文界定。有这样的隐式值Manifest[T]来辅助构建Array[T],从而确定数组类型 val r = new Array[T](2) r(0) = first r(1) = second r } //原始写法(不推荐) def manif[T](x : List[T])(implicit m : Manifest[T]) = { if(m <:< manifest[String]) println("List String") //<:<意思是m是manifest[String]的类型 else println("some other type") } manif(List("Spark", "Hadoop")) //会隐式传入Manifest[String]的对象参数 manif(List(1,2)) manif(List("scala", 3)) }}
输出:
List String
some other type
some other type
class A[T] val m = manifest[A[String]] println(m) val cm = classManifest[A[String]] println(cm)
输出:
ce.scala.zhong.A[java.lang.String]
ce.scala.zhong.A[java.lang.String]
ClassTag:
import scala.reflect.ClassTag //ClassTag最常用 def mkArray[T : ClassTag](elems : T*) = Array[T](elems : _*) //ClassTag在运行时指定在编译时无法确定的比较high-level级别的类别的信息(不包括static的,但这已经足够了) //JVM不认识Array[T],只认识Array[Int]或者Array[String] mkArray(42,13).foreach(println) mkArray("Chinese", "Germany", "Brazil").foreach(println)
输出:
42
13
Chinese
Germany
Brazil
参考资料来源于大数据梦工厂 深入浅出scala 第46讲 由王家林老师讲解
阅读全文
0 0
- 46.ClassTag 、Manifest、ClassManifest、TypeTag代码实战及其在Spark中的应用源码解析
- scala-46: ClassTag 、Manifest、ClassManifest、TypeTag代码实战及其在Spark中的应用源码解析
- 第46讲:ClassTag 、Manifest、ClassManifest、TypeTag代码实战及其在Spark中的应用源码解析学习笔记
- Scala深入浅出进阶经典 第46讲: ClassTag 、Manifest、ClassManifest、TypeTag代码实战及其在Spark中的应用源码解析
- ClassTag 、Manifest、ClassManifest、TypeTag代码实战
- scala进阶5-classtag、typetag、manifest、classmanifest
- Scala关于ClassTag 、Manifest、ClassManifest、TypeTag的使用
- Scala中ClassTag 、Manifest、ClassManifest、TypeTag的关系
- scala-43:Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析
- scala-45:Scala中Context Bounds代码实战及其在Spark中的应用源码解析
- 43.Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析
- 44.Scala中View Bounds代码实战及其在Spark中的应用源码解析
- 45.Scala中Context Bounds代码实战及其在Spark中的应用源码解析
- 47.Scala多重界定代码实战及其在Spark中的应用源码解析
- 48.Scala类型约束代码实战及其在Spark中的应用源码解析
- 49.Scala中Variance代码实战及其在Spark中的应用源码解析
- 第43讲:Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析学习笔记
- 第44讲:Scala中View Bounds代码实战及其在Spark中的应用源码解析学习笔记
- 出栈全排列
- iOS runtime ~ 重要类型
- Android AndroidManifest 清单文件以及权限详解
- 51Nod 1487 思维+线段树
- js学习-对象
- 46.ClassTag 、Manifest、ClassManifest、TypeTag代码实战及其在Spark中的应用源码解析
- HDU1251:统计难题
- Fork函数
- verilogVGA显示字符
- Fails to build with protobuf 2.6.0
- unity学习笔记#3--在unity中读取XML数据
- SDCard读写文件
- 好的技术网站,值得收藏。。。
- Android PopupWindow详解