如何避免在 Scala 中使用 asInstanceOf

2024-04-26

目前我的代码需要类转换

val dataWriter: BytesDataWriter = createDataWriter

 def createDataWriter(p: SomeClass) =
    p.create_datawriter().asInstanceOf[BytesDataWriter]

The create_datawriter方法将返回超类DataWriter。而不是使用它来投射它asInstanceOf,我尝试过这种方法

val dataWriter: BytesDataWriter = createDataWriter(p)  match {
      case writer: BytesDataWriter => writer
      case _ => throw new ClassCastException
    }

这太冗长了,万一情况不起作用。除了班级选角之外,还有更好的选择吗?


如果可以的话,您可以使用第二种方法某物与非BytesDataWriter结果,或者获得更好的错误消息:

val dataWriter: BytesDataWriter = p.create_datawriter() match {
  case writer: BytesDataWriter => writer
  case other => throw new Exception(s"Expected p to create a BytesDataWriter, but got a ${other.getClass.getSimpleName} instead!")
}

否则,使用asInstanceOf.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免在 Scala 中使用 asInstanceOf 的相关文章

  • 在 play 框架中将 javascript 变量转换为 scala

    我在 javascript 中有一些变量 var something 1 var url CSRF routes Some thing something 我在编译期间收到错误 因为 某物 换句话说 不引用 javascript 变量 编译
  • Spark:shuffle操作导致GC长时间暂停

    我在跑Spark 2我正在尝试洗牌大约 5 TB 的 json 我在洗牌期间遇到了很长的垃圾收集暂停Dataset val operations spark read json inPath as MyClass operations re
  • 是否有理由使用 Scala 的 StringLike.replaceAllLiterally 而不是 Java 的 String.replace?

    Scala 的 StringLike 有该方法replaceAllLiterally literal String replacement String String https github com scala scala blob 56
  • Haxe 摘要 - 使用 @:from 时可以隐式转换数组吗?

    我试图将一种类型的数组视为另一种 抽象 类型的数组 当我使用抽象的基础类型时 它工作得很好 但是当我尝试使用另一种类型 使用定义的 from关键字 我构建失败 如果我使用显式的 它会起作用cast 但我想知道 有什么办法可以解决这个问题 我
  • 一般重写 Scala 案例类

    是否可以通用地替换案例类中的参数 更具体地说 假设我想要一个接收 查找 案例类和 替换 案例类 如语法规则的左侧和右侧 以及目标案例类的替代函数 并且该函数将返回将查找案例类的参数替换为替换案例类的新案例类 该函数还可以简单地采用一个案例类
  • 如何将 Java 字节数组转换为 Scala 字节数组?

    我是 Scala 新手 目前正在从事一个涉及 Java 和 Scala 模块的项目 现在我想使用 byte 类型的参数从 Java 调用 Scala 方法 Scala 方法的签名为 def foo data Array Byte Java
  • JVM 是否会内联对象的实例变量和方法?

    假设我有一个非常紧密的内部循环 每次迭代都会访问和改变一个簿记对象 该对象存储有关算法的一些简单数据 并具有用于操作它的简单逻辑 簿记对象是私有的和最终的 并且它的所有方法都是私有的 最终的和 inline 下面是一个示例 Scala 语法
  • 将案例类传递给函数参数

    抱歉问了一个简单的问题 我想将案例类传递给函数参数 并且想在函数内部进一步使用它 到目前为止我已经尝试过这个TypeTag and ClassTag但由于某种原因 我无法正确使用它 或者可能是我没有看到正确的位置 用例与此类似 case c
  • 在 C 中使用 #if 进行转换

    为什么这段代码会出错 include
  • 重写继承的构造函数字段时的差异?

    考虑这个简单的 Scala 类 class A val d Int Scala 之间是否存在差异 无论是行为还是生成的字节码 class B d Int extends A d and class B override val d Int
  • scala 使用 GMPUtil 处理 pidigits

    Rex Kerr 发布了有关在 scala 中使用 GMP 的信息 特别是运行 pidigits 程序 libjpargmp so 使用 GmpUtil c 生成 我的问题是 在哪里可以找到 GMPUtil c 我的谷歌搜索没有发现任何东西
  • 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 我想根据键获取交集并返回一个表示合并值的元组 结果看起来
  • SBT - 运行任务来设置SettingKey

    所以我的一般问题是我想根据任务的结果设置版本密钥 但是版本密钥是在任务运行之前设置的 据我了解 一旦设置了键的值 我就无法更改它 因此我无法在我的任务中更改它 我想要做的是将任务作为发布任务的依赖项运行并更改版本的值 我觉得一定有办法做到这
  • 对于值类型,asInstanceOf[X] 和 toX 之间有什么区别吗?

    我使用 IntelliJ 将 Java 代码转换为 Scala 代码的功能 通常效果很好 看来 IntelliJ 用调用替换了所有强制转换asInstanceOf 是否有任何有效的用法asInstanceOf Int asInstanceO
  • Play 框架 2.0:在 Http.Context 中存储值

    我正在尝试在 Play 框架中的 scalaquery 中实现 基于请求 的会话 我使用 scalaquery 创建一个会话 并尝试将其存储在当前的 http 上下文中 如下所示 def withTransaction A bp BodyP
  • 如何从命令行运行scala文件?

    scala是否支持scala run xxx scala go语言支持这样运行 go my go 并且Python支持 python my py 但看来 scala xxx scala 仅进行语法检查 未观察到任何输出或运行行为 那么有没有
  • 'val' 或 'var',可变还是不可变?

    我可以定义一个变量 通过var 是不可变的 var x scala collection immutable Set aaaaaa bbbbbb println x isInstanceOf scala collection immutab
  • 结构化 scala 案例类的自定义 json 序列化

    我有一些用于往返 scala 案例类的工作 jackson scala 模块代码 Jackson 对于平面案例类非常有用 但是当我制作一个包含其他案例类列表的案例时 我似乎需要很多代码 考虑 abstract class Message c
  • 加特林负载测试期间编译错误

    我正在尝试编写一个模拟 并且希望能够运行该模拟 我在尝试 mvn gatling execute 时遇到错误 我的 pom 有以下依赖项
  • 如何使用 scala 宏打印变量名称和值?

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

随机推荐

  • jQuery、PHP 表单 echo 不起作用

    你们能否让我知道下面出了什么问题 出于某种原因 当我单击删除图像时 它应该返回来自dela php文件 但没有 div div
  • 想要根据组合框和搜索栏过滤行我还想使用 select 取消全选复选框进行多选并在 pyQt5 中进行搜索

    在这里 我有一个 tableView 上传按钮 两个组合框 当用户上传 csv 文件时将自动填充 还有一个搜索栏 QLineEdit 2 我想根据两个复选框和搜索栏 QLineEdit 2 过滤行 我还想让组合框通过全选进行多选 并通过搜索
  • JQuery UI 菜单滚动

    我正在使用本机 jquery ui 菜单并尝试让它滚动 我发现它实际上内置了这种行为 某种程度上 我不确定这是有意还是无意 JSFiddle 演示 http jsfiddle net brombomb rn4rB HTML div ul d
  • Windows Embedded CE 6.00 无法运行 Net Compact Framework 3.5 应用程序

    首先 我有一台带有 Windows Embedded CE 6 0 的设备 众所周知 EWS 托管 API 只能在 NET Framework 3 5 及更高版本上使用 我创建了一个新项目 gt 智能设备项目 gt 目标平台 Window
  • Apache CXF 使附加类对于 JAXB 上下文“已知”

    如何配置 Apache CXF 客户端和服务器在将 DTO 序列化为 XML 时将附加类传递给 JAXBContext 我无法使用 XmlSeeAlso 注释 因为这些类在带有数据协定的 jar 编译时是未知的 但在客户端编译时是已知的 在
  • 将反应路由器与反应门户一起使用?

    我正在实现一个带有大量表的应用程序 可以与react router完美配合 读取URL查询等 现在我需要将其中一个表放入模式中 我正在使用AntUI模态 https ant design components modal 用于此目的的组件
  • 如何 UPSERT(更新或插入表?)

    UPSERT 操作更新或插入表中的行 具体取决于表是否已有与数据匹配的行 if table t has a row exists that has key X update t set mystuff where mykey X else
  • 如何在 Shiny 中获得一个按钮来并行调用 JavaScript 和 R 代码?

    我在 Shiny 中有一个 HTML 按钮 单击该按钮时会调用 JavaScript 函数geocodeAddressStreet in a js文件在 www目录 tags body tags input type button valu
  • 如何在 JQuery 中伪造 AJAX 开始/结束事件?

    我正在听 ajaxStart 和 ajaxStop 来显示 隐藏微调器 并且在编写服务器时我正在 JS 中执行一些模拟 AJAX 操作 它只是调用一个函数来使用 setTimeout 生成模拟数据 现在我只是在微调器上手动调用 hide 和
  • 当站点位于网络驱动器时,IE 无法正确渲染 CSS

    这是我们和我的朋友遇到的一个奇怪的问题 我们将网站定位在网络驱动器上 并尝试从那里打开它 所有其他浏览器都能很好地呈现此页面 但 IE 顺便说一句 为什么它总是 IE 无法理解 inline block 语句 但如果我将文件复制到本地驱动器
  • 是否可以通过括号来防止死亡?

    有时 我会编写一些带有比我喜欢的更多括号的代码 if new Day new Date millisecondsPerDay 75 instanceof oldDay Bonus points if that condition made
  • 为树视图创建 Qt 模型

    我正在用 Qt 使用 C 编写一个应用程序 我需要在树视图中表示一个对象结构 实现此目的的方法之一是为此创建一个模型 但在阅读有关该主题的 Qt 文档后我仍然很困惑 我的 结构 非常简单 有一个Project持有的物体Task中的对象std
  • 批量插入期间 SQL Server 表锁

    下面是示例查询 考虑 A INSERT INTO Target Col1 Col2 Col3 Col4 Statement 1 Select A Col1 B Col2 A Col3 C Col4 Statement 2 FROM A WI
  • 如何在 WordPress 中创建“路线”?

    为了我自己的理智 我正在尝试为 ajax api 创建一条路由 如下所示 api
  • Unix shell 之间的可移植性 - 我是否正确地考虑了这个问题?

    每当我编写 shell 脚本 主要是软件开发实用程序或构建工具 时 我通常都会尝试避免使用 bash 而倾向于使用普通的旧 sh 来实现可移植性 然而最近我遇到了越来越多的问题 其中有用的功能不可用 或者使用 sh 的系统之间的行为实际上不
  • 节点命令不起作用[重复]

    这个问题在这里已经有答案了 我正在使用 ubuntu 14 04 当我在终端上使用 node hello js 命令时 没有任何反应 我使用 sudo apt get 命令安装了软件包 我不知道出了什么问题 没有错误消息或任何东西 我搜索了
  • 在matplotlib中,如何绘制多色线,如彩虹

    我想用不同的颜色绘制平行线 例如 我想要两条厚度为 3 的平行线 一红一蓝 而不是一条粗细为 6 的红线 任何想法将不胜感激 Merci 即使使用智能偏移 见下文 连续点之间存在锐角的视图中仍然存在问题 Zoomed view of sma
  • Maven依赖冲突

    在我的项目中 有2个库 每个库都依赖于XML解析类java xml parsers DocumentBuilderFactory 这些库中的每一个都引用来自不同 jar 的文件 一个从名为 xmlParserAPIs 的 jar 获取它 而
  • C++ 中的跨平台原始数据类型

    与 Java 或 C 不同 C 中的原始数据类型的大小可能因平台而异 例如 int不保证是 32 位整数 各种编译器环境定义数据类型 例如uint32 or dword为此目的 但似乎没有固定大小数据类型的标准包含文件 实现最大可移植性的推
  • 如何避免在 Scala 中使用 asInstanceOf

    目前我的代码需要类转换 val dataWriter BytesDataWriter createDataWriter def createDataWriter p SomeClass p create datawriter asInsta