Scala>scala类型判断

2023-11-19

类型判断

有时候,我们设计的程序,要根据变量的类型来执行对应的逻辑。
在这里插入图片描述
在scala中,如何来进行类型判断呢?
有两种方式:

  • isInstanceOf
  • getClass/classOf

isInstanceOf/asInstanceOf

在Java中,可以使用instanceof关键字来判断类型、以及(类型)object来进行类型转换,在scala中如何实现?

scala中对象提供isInstanceOf和asInstanceOf方法。

  • isInstanceOf判断对象是否为指定类的对象
  • asInstanceOf将对象转换为指定类型

用法

// 判断对象是否为指定类型
val trueOrFalse:Boolean = 对象.isInstanceOf[类型]
// 将对象转换为指定类型
val 变量 = 对象.asInstanceOf[类型]

示例

  • 定义一个Person类
  • 定义一个Student类继承自Person类
  • 创建一个Student类对象
  • 判断该对象是否为Student类型,如果是,将其转换为Student类型并打印该对象

参考代码

class Person3
class Student3 extends Person3

object Main3 {
  def main(args: Array[String]): Unit = {
    val s1:Person3 = new Student3

    // 判断s1是否为Student3类型
    if(s1.isInstanceOf[Student3]) {
      // 将s1转换为Student3类型
      val s2 =  s1.asInstanceOf[Student3]
      println(s2)
    }

  }
}

getClass和classOf

isInstanceOf 只能判断对象是否为指定类以及其子类的对象,而不能精确的判断出,对象就是指定类的对象。如果要求精确地判断出对象就是指定类的对象,那么就只能使用getClassclassOf

用法

  • p.getClass可以精确获取对象的类型
  • classOf[x]可以精确获取类型
  • 使用==操作符可以直接比较类型

示例

  • 定义一个Person类
  • 定义一个Student类继承自Person类
  • 创建一个Student类对象,并指定它的类型为Person类型
  • 测试使用isInstance判断该对象是否为Person类型
  • 测试使用getClass/classOf判断该对象是否为Person类型
  • 测试使用getClass/classOf判断该对象是否为Student类型

参考代码

class Person4
class Student4 extends Person4

object Student4{
  def main(args: Array[String]) {
    val p:Person4=new Student4
    //判断p是否为Person4类的实例
    println(p.isInstanceOf[Person4])//true

    //判断p的类型是否为Person4类
    println(p.getClass == classOf[Person4])//false

    //判断p的类型是否为Student4类
    println(p.getClass == classOf[Student4])//true
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala>scala类型判断 的相关文章

  • 为什么使用散列而不是点来选择 Scala 类型成员?

    在 Scala 中 从类中选择类型的语法与从类中选择其他任何内容的语法不同 因为前者使用散列而不是点作为选择运算符 这是为什么 示例 如果我们有这样的课程 class Example type Foo String 为什么我们要从这样的类中
  • Mockito 在 ScalaTest 中的答案

    有没有 Mockito 的替代品Answer http docs mockito googlecode com hg latest org mockito stubbing Answer html在 Scala 测试中 我正在经历它文档 h
  • 自定义类上的 List.sum

    我有以下代表 GF2 字段的代码 trait GF2 def unary this def that GF2 GF2 def that GF2 GF2 def that GF2 that match case Zero gt throw n
  • 在 play 框架中将 javascript 变量转换为 scala

    我在 javascript 中有一些变量 var something 1 var url CSRF routes Some thing something 我在编译期间收到错误 因为 某物 换句话说 不引用 javascript 变量 编译
  • 使用Log4j在日志中输出Spark应用程序id

    我有一个用于 Spark 应用程序的自定义 Log4j 文件 我想输出 Spark 应用程序 ID 以及消息和日期等其他属性 因此 JSON 字符串结构如下所示 name time date level thread message app
  • Spark:shuffle操作导致GC长时间暂停

    我在跑Spark 2我正在尝试洗牌大约 5 TB 的 json 我在洗牌期间遇到了很长的垃圾收集暂停Dataset val operations spark read json inPath as MyClass operations re
  • 带尖括号 (<>) 的方法

    方法名称中是否可以有尖括号 例如 class Foo ind1 Int ind2 Int var v new Foo 1 2 v 1 3 updates ind1 v lt 1 gt 4 updates ind2 真实情况显然比这更复杂 我
  • Spark:有没有办法打印出spark-shell和spark的类路径?

    我可以在 Spark shell 中成功运行 Spark 作业 但是当它打包并通过 Spark submit 运行时 我收到 NoSuchMethodError 这向我表明类路径存在某种不匹配 有没有办法可以比较两个类路径 某种日志记录语句
  • Twitter API 与 Scala 2.12 一起使用

    我正在使用 Scala 2 12 使用 SBT 构建 构建 Spark 3 0 0 流应用程序 鉴于所有用于执行此操作的库均适用于 Scala EDIT 我尝试使用库构建时得到的示例输出 object twitter is not a me
  • 在 Scala 中将 Map[String, String] 转换为 Map[String, Int]

    我有一个 Map 其中键是 String 值是 Int 但表示为 String scala gt val m Map a gt 1 b gt 2 c gt 3 m scala collection immutable Map String
  • JVM 是否会内联对象的实例变量和方法?

    假设我有一个非常紧密的内部循环 每次迭代都会访问和改变一个簿记对象 该对象存储有关算法的一些简单数据 并具有用于操作它的简单逻辑 簿记对象是私有的和最终的 并且它的所有方法都是私有的 最终的和 inline 下面是一个示例 Scala 语法
  • for-yield-getOrElse 是 Scala 的范例还是有更好的方法?

    基本上我想提取一堆选项 a b 等 这是在 Scala 中执行此操作的最佳方法吗 对于我来说 括号中的 for yield 看起来有点令人困惑 for a lt a b lt b c lt c yield getOrElse 尝试使用map
  • 如何使用 Apache Livy 设置 Spark 配置属性?

    我不知道在向 Apache Livy 提交 Spark 作业时如何以编程方式传递 SparkSession 参数 这是测试 Spark 作业 class Test extends Job Int override def call jc J
  • Scala 中两个地图的交集和合并/连接

    假设我有两张类似这样的地图 val m1 Map 1 gt One 2 gt Two 3 gt Three val m2 Map 2 gt 2 0 3 gt 3 0 4 gt 4 0 我想根据键获取交集并返回一个表示合并值的元组 结果看起来
  • 实施策略模式的函数式方法

    我正在尝试解决一个处理从一种温度单位到另一种温度单位 摄氏度 开尔文 华氏度 转换的问题 在Java中 我需要创建一个接口并提供多个实现来封装输入类型并将结果作为输出类型的单元返回 例如开尔文到摄氏度或摄氏度到华氏度等 我已经在 scala
  • JavaFx ComboBox 绑定混乱

    我有一个 I18N 实现 它通过属性绑定 JavaFX UI 元素 例如 def translateLabel l Label key String args Any Unit l textProperty bind createStrin
  • 如何从命令行运行scala文件?

    scala是否支持scala run xxx scala go语言支持这样运行 go my go 并且Python支持 python my py 但看来 scala xxx scala 仅进行语法检查 未观察到任何输出或运行行为 那么有没有
  • Scala SBT 和 JNI 库

    我正在编写一个简单的应用程序Scala通过以下方式使用 leveldb 数据库leveldbjni图书馆 我的build sbt文件看起来像这样 name Whatever version 1 0 scalaVersion 2 10 2 l
  • 在 Scala 中调用反射案例类构造函数

    我可以通过静态反射获取案例类的默认构造函数 val symbol currentMirror classSymbol myObj getClass typeSignature typeSymbol asClass val ctor symb
  • 如何使用 scala 宏打印变量名称和值?

    我确信有一种更优雅的方式来编写以下宏来打印变量的名称和值 def mprintx c Context linecode c Expr Any c Expr Unit import c universe val namez c enclosi

随机推荐

  • 【Java】网络编程——多线程下载文件

    前言 多线程下载文件 比单线程要快 当然 线程不是越多越好 这和获取的源文件还有和网速有关 原理 在请求服务器的某个文件时 我们能得到这个文件的大小长度信息 我们就可以下载此长度的某一个片段 来达到多线程下载的目的 每条线程分别下载他们自己
  • docker使用(一)生成,启动,更新(容器暂停,删除,再生成)

    docker使用 一 编写一个 Dockerfile 构建镜像 构建失败 构建成功 运行镜像 运行成功 修改代码后再次构建 请不要直接进行构建 要将原有的旧容器删除或暂停 停止成功 删除成功 再次构建且构建成功 要创建一个镜像 你可以按照以
  • 最全前端性能优化总结

    最全前端性能优化总结 前端性能优化分两部分 一 加载性能优化 1 减少请求次数 为什么减少请求次数 减少请求次数方式 2 减少资源大小 减少资源大小方式 3 网络优化 其他 二 渲染性能优化 浏览器渲染过程 重排 重绘 渲染性能优化方式 三
  • GB28181状态信息报送解读及Android端国标设备接入技术实现

    今天主要聊聊GB T28181状态信息报送这块 先回顾下协议规范相关细节 然后再针对代码实现 做个简单的说明 状态消息报送基本要求 当源设备 包括网关 SIP设备 SIP客户端或联网系统 发现工作异常时 应立即向本 SIP监控域 的SIP服
  • Qume-KVM虚拟化

    Qume KVM虚拟化 文章目录 虚拟化概述 KVM概述 KVM虚拟化架构 Qume概述 部署Qume KVM KVM Web管理界面安装 Web管理界面 添加连接 新建存储池 新建镜像 新建网络 实例管理 虚拟化概述 什么是虚拟化 虚拟化
  • 用Python画出圣诞树,瞧瞧我这简易版的吧

    前言 嗨嗨 大家好 我是小圆 今天来实现一下 用python画出圣诞树 代码 模块 源码 点击领取即可 import turtle as t from turtle import import random as r import time
  • 32种针对硬件与固件的漏洞攻击

    2018年1月 全球计算机行业因为Meltdown以及Spectre这两个在处理器中存在的新型漏洞而受到威胁 这两个漏洞直接打破了分离内核以及用户内存的OS安全边界 这两个漏洞基于了现代CPU的预测执行功能 而缓解这两个漏洞带来的影响则需要
  • 最快方式 ESP-IDF 创建例子 教程

    需要条件 安装了 VSCODE 安装了插件 Espressif IDF工具 系统中安装了 ESP IDF 可使用离线包 或在线安装包 在插件中配置了 ESP IDF 可能需要在线更新一些东西 点击F1 输入 ESP 等待提示 出现提示后 选
  • 软件测试 接口测试 入门Jmeter 接口关联 提取器 断言 与fiddler配合使用 使Jmeter录制和创建脚本 操作数据库 持续集成测试

    文章目录 1 接口测试概述 1 1 什么是接口测试 1 2 接口分类 1 3 接口的设计风格分类 1 3 1 Soap架构 1 3 2 Rpc架构 1 3 3 RestFul架构 1 3 4 接口测试工具介绍 1 4 接口测试流程 2 Jm
  • 使用 Vue.js 结合bootstrap 实现的分页控件

    使用 vue js 结合 bootstrap 开发的分页控件 效果如下 实现代码 div class contai div
  • 毕业设计-基于卷积神经网络的花卉图片识别

    目录 前言 课题背景和意义 实现技术思路 一 LeNet 5 卷积神经网络模型 二 设计思路 三 实验及结果分析 四 总结 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要
  • vue项目使用externals优化打包体积

    查看打包体积 下载查看打包体积的插件 npm install webpack bundle analyzer save dev 在vue config js中配置 chainWebpack config gt 打包结果分析 if proce
  • prompt 综述

    动手点关注 干货不迷路 1 概述 1 1 基本概念 用一句话概括模板学习 即将原本的输入文本填入一个带有输入和输出槽位的模板 然后利用预训练语言模型预测整个句子 最终可以利用这个完整的句子导出最终需要的答案 模板学习最吸引人的关键在于其通过
  • Spring Boot 项目在本地可以成功访问但是在服务器上无法访问 Controller 方法解决办法

    这是一篇记录自己失了智的博客 晚上写了一个小 Demo 来测试在云服务器上同时运行两个 jar 包的情况 两个项目的端口分别为 8080 和 8880 以 8880 为端口的 Demo 在本地成功运行并且访问到了 Controller 中的
  • 2023华为OD机试真题【最大平分数组/动态规划】

    题目描述 给定一个数组nums 可以将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 最大的平分组个数 输入描述 第一行输入 m 接着输入m个数 表示此数组 数据范围 1 lt M lt 50 1 lt nums i lt 50
  • GAN数学原理及代码实现

    GAN generator 和discriminator 生成式对抗网络 Generative Adversarial Networks GAN 包括生成器 generator 和判别器 discriminator 生成器 generato
  • springboot+mybatis+druid 多数据源整合

    前言 在上一篇文章里面我们进行了spring boot 和 mybatis 的整合 springboot整合mybatis使用druid数据源 文中是使用的单数据源 因为项目中有很多需要用到多数据源的场景 比如主从同步 读写分离 或者业务库
  • Pandas基本操作总结 excel读取和数据清洗

    1 读取表格 df pd read excel 目标文件路径 skiprows 要跳过的行数 指定读取表格时要跳过前面空行的行数 2 筛选某列不是空值的所有行 df loc df 某列 notnull 筛选某列不为空值的所有行 筛选行后选取
  • docker使用常用基础命令详解版

    文章目录 Docker基本命令 1 查看docker信息 version info 2 对image的操作 search pull images rmi history 3 启动容器 run 4 查看容器 ps 5 保存对容器的修改 com
  • Scala>scala类型判断

    文章目录 类型判断 isInstanceOf asInstanceOf getClass和classOf 类型判断 有时候 我们设计的程序 要根据变量的类型来执行对应的逻辑 在scala中 如何来进行类型判断呢 有两种方式 isInstan