【Scala五】分析Spark源代码总结的Scala语法三

本文深入探讨Scala编程语言中If语句作为表达式的应用,并详细解析asInstanceOf方法在向上转型和协变场景下的使用技巧。通过具体实例展示如何在不同场景下灵活运用类型转换,旨在提高开发者对Scala语言特性的理解和实践能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. If语句作为表达式

    val properties = if (jobIdToActiveJob.contains(jobId)) {
      jobIdToActiveJob(stage.jobId).properties
    } else {
      // this stage will be assigned to "default" pool
      null
    }

 

2.asInstanceOf方法

像是协变,

scala> val a = List(1,2,3);
a: List[Int] = List(1, 2, 3)

scala> val b = a.asInstanceOf[List[Number]]
b: List[Number] = List(1, 2, 3)

scala> b(1)
res0: Number = 2

 

 

///向上转型
scala> val b = a.asInstanceOf[Int]
b: Int = 10

scala> val b = a.asInstanceOf[Any]
b: Any = 10

 

只能做协变和向上转型,如下操作是不行的,

 

如下是不可以的

scala> val a=10
a: Int = 10

scala> val b = a.asInstanceOf(String)

scala> val b = a.asInstanceOf[String]
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
        at .<init>(<console>:8)
        at .<clinit>(<console>)
        at .<init>(<console>:7)
        at .<clinit>(<console>)
        at $print(<console>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.ja
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccesso
        at java.lang.reflect.Method.invoke(Method.java:606)
        at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:734)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值