Scala中的Type与Class


示例代码:

//Type与Class实战详解
/**
 * 类型系统与类
 * 
 * 无论java还是scala都是基于jvm虚拟机
 * java1.5以前一个具体对象的类型和他的class是一一对应的,后来由于引入了泛型。
 * 例如数组,数组里面有可能是字符串也可能是整数类型等等,
 * 虚拟机本身并不关心泛型,或者类型系统,在虚拟机中泛型在编译和运行时是被擦除掉的。
 * 在运行时是通过反射获取到的。
 */
import scala.reflect.runtime.universe._
class Spark
trait Hadoop
object Flink
class Java{
  class Scala
}

object Type_Advanced {

  def main(args: Array[String]): Unit = {
    println(typeOf[Spark])  //com.dt.scala.bestpractice.Spark
    println(classOf[Spark]) //Class[_<: Spark]  //class com.dt.scala.bestpractice.Spark

    val spark = new Spark
//    println(spark.getClass == classOf[Spark])
    println(classOf[Hadoop]) //interface com.dt.scala.bestpractice.Hadoop
    println(typeOf[Hadoop])  //com.dt.scala.bestpractice.Hadoop
    
    println(Flink.getClass)  //class com.dt.scala.bestpractice.Flink$   object背后是有具体的类的
//    println(classOf[Flink])//报错,没有找到Flink这个类
    //classOf与getClass的区别:getClass其实获得的是当前类的子类, 直接classOf就是当前的类型
    
    
    val java1 = new Java
    val java2 = new Java
    val scala1 = new java1.Scala
    val scala2 = new java2.Scala
    println(scala1.getClass)  //class com.dt.scala.bestpractice.Java$Scala
    println(scala2.getClass)  //class com.dt.scala.bestpractice.Java$Scala
    println(typeOf[java1.Scala] == typeOf[java2.Scala])  //false
    println(typeOf[java1.Scala])  //java1.Scala
  }
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值