第78讲:Type与Class实战详解学习笔记

78讲:TypeClass实战详解学习笔记

本讲主要讲解scala中的typeclass的区别

由于在scala中非常强调泛型或者说类型系统

Javascala是基于jvm的,

java1.5以前具体对象的类型与class一一对应

后来引入泛型,如字符串数组或整数数组,都是数组

但其实类型是不一样的,在虚拟机内部,并不关心泛型或类型系统

对泛型支持是基于运行时角度考虑的,在虚拟机中泛型被编译运行时是被擦除的,

在运行时泛型是通过反射方式获取,在scala中类型系统非常强大

scala中有一个scala.reflect.runtime.universe

class比,type更具体,任何数据都有类型,

class其实是一种数据结构和基于该数据结构的一种抽象,

例如array,或file有自己的成员和方法,更宏观。

type本身更具体 。

 

实战代码:

import scala.reflect.runtime.universe._

class Spark

trait Hadoop

object Flink

class Java {

  class Scala

  //内部类

}

objdect Type_Advanced {

  def main(args:Array[String]){

    println(typeOf[Spark])

    println(classOf[Spark])

 

    val spark = new Spark

    println(classOf[Spark])

    //Class[_ <: Spark]表明子类

    //println(spark.getClass == classOf[Spark])  报错

    

    println(classOf[Hadoop])

    println(typeOf[Hadoop])

 

    println(Flink.getClass)

    //运行结果打印class com.dt.scala.bestpractice.Flink$

    //生动地告诉我们object背后是有具体的class

    //println(classOf[Flink])  报没有找到Flink类,

    //classOfgetClass基本是没有区别的,

    //getClass是获得具体的类的子类,

    //classOf是类本身,

 

    val java1 = new Java

    val java2 = new Java

    val scala1 = new java1.Scala

    val scala1 = new java2.Scala

    println(scala1.getClass)

    println(scala2.getClass)

    //上面两例打印结果都是:Java$Scala

    println(typeOf[java1.Scala] == typeOf[java2.Scala])

    println(typeOf[java1.Scala])

    //打印结果:java1.Scala

    println(typeOf[java2.Scala])

    //打印结果:java2.Scala

    //typeOf[java1.Scala] 与 typeOf[java2.Scala]结果不一样,

    //而且与scala1.getClassscala2.getClass的结果都不一样。

    //从打印结果可以看出typeOf返回具体信息,而getClass返回更高层的信息

 

    println(classOf[List[Int]] == classOf[List[String]])

    println(typeOf[List[Int]] == typeOf[List[String]])

    //泛型List返回同样是classOf更高层一些,typeOf更具体一些。

  }

}

 

 

 

以上代码运行结果:

 

 

以上内容是从王家林老师DT大数据课程第78讲的学习笔记。
DT大数据微信公众账号:DT_Spark  

王家林老师QQ:1740415547 

王家林老师微信号:18610086859
scala78讲视频观看链接:
http://yun.baidu.com/s/1ntmr88L
我的百度网盘共享的DT大数据梦工厂王家林老师第1-79讲的视频内容:http://pan.baidu.com/s/1qWK9CMo

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值