避免在泛型方法中强制转换为 Nothing

2024-01-10

scala> def foo[U](t: Any) = t.asInstanceOf[U]
foo: [U](t: Any)U

scala> val s: String = foo("hi")

scala> val n = foo("hi")
java.lang.ClassCastException: java.lang.String cannot be cast to scala.runtime.Nothing$
    at .<init>(<console>:6)
    at .<clinit>(<console>)
    at RequestResult$.<init>(<console>:9)
    at RequestResult$.<clinit>(<console>)
    at RequestResult$scala_repl_result(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$18.apply(Interpreter.scala:981)
    at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$18.apply(Interpreter.scala:981)
    at scala.util.control.Exce...

有没有办法编写#foo,以便在未推断“U”或未显式设置为“真实”类型时返回 Any?


否。静态类型是U。如果这被推断为Nothing,编译器不允许返回类型的值Any.

您可以改进运行时错误消息:

def foo[U: Manifest](t: Any): U = if (implicitly[Manifest[U]] == manifest[Nothing]) 
  error("type not provided") 
else t.asInstanceOf[U]

或者听从Arjan的建议。

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

避免在泛型方法中强制转换为 Nothing 的相关文章

随机推荐

  • array.contains 的 jquery 版本

    jQuery 可以测试数组中是否存在对象 作为核心功能的一部分或通过可用的插件 另外 我正在寻找类似的东西array remove 这将从数组中删除给定的对象 jQuery 可以帮我处理这个问题吗 jQuery inArray http d
  • 进程已完成,退出代码 -1073741515 (0xC0000135)

    我正在运行一个 python 脚本 它曾经可以工作 现在甚至在我的另一台笔记本电脑上也可以 但不能在我当前的计算机上 我只是得到错误代码 Process finished with exit code 1073741515 0xC00001
  • 如何使用内联函数声明字典

    在将函数用作字典的元素之前 是否必须正式定义该函数 def my func print my func d function my func 我宁愿内联定义该函数 我只是想输入我想要做的事情 但是 python 语法的空白策略使得在字典中定
  • Web 应用程序的容器管理安全性

    我对容器管理的安全性完全陌生 需要一些帮助来在我的 Web 应用程序中配置它 我想限制对我的 Web 应用程序中的 jsp 的访问 这就是我在 web xml 中配置安全性的方式
  • Hbase 和 BigTable 有什么区别?

    谁能告诉我 Apache HBase 数据库和 Bigtable 之间有什么区别 或者它们是相同的吗 如果有的话 哪一个支持关系 如果他们是大搜索者 有什么区别 它们很相似 但又不一样 Bigtable 最初于 2005 年发布 但并未发布
  • RStudio 全局设置(选项)导出/导入

    我想导出 导入 RStudio 全局选项 通常可以在 RStudio 的 工具 gt 全局选项 中找到并设置这些选项 理想情况下 我可以运行一行代码 将现有设置保存到文件中 然后运行另一行代码以从此文件加载这些设置 这些选项包括 GUI 的
  • Git rebase 失败,“您对以下文件的本地更改将被合并覆盖”。没有本地改变吗?

    这是我尝试将 bugfix 分支合并到 master 分支以准备将其推向上游的记录 自从创建 bugfix 分支以来 已经有一些上游更改被拉入 master 并且现在拒绝 rebase 它引发错误的文件在打开时没有差异 没有添加 删除或重命
  • tomcat 重新启动 => 找不到 SessionFactory [uuid=...,name=null]

    继续解决这个情况 https stackoverflow com questions 6506476 java lang illegalstateexception unread block data 我已经更新了hibernate ond
  • 如何在 C# 中将 XMLSerialize 用于 Enum 类型属性?

    我有一个简单的枚举 enum simple one two three 我还有一个具有 type 属性的类simple 我尝试用以下属性装饰它 XmlAttribute DataType int 但是 当我尝试使用序列化它时 它失败了Xml
  • 错误:连接失败(没有到主机的路由)

    上下文 我有一个 Xamarin Android 应用程序 它连接到 WebAPI 以获取不同的信息 问题 尝试访问服务器时出现以下错误 System Net Http HttpRequestException 发送请求时发生错误 gt S
  • 当文本字段为空时,如何在 Xcode UI 测试中测试 UITextField?

    我正在做一个UITest在 Xcode 中 当我记录测试时 它工作正常 但当我运行测试时 它会出现错误 这些是发生错误的代码行 XCUIElement clearTextTextField app textFields containing
  • 在本地 html 文件中使用 JavaScript 设置 Cookie

    我有以下目录树 folder1 folder2 page1 html page2 html 如果我设置一些cookiepage1 html使用 JavaScript 该 cookie 使用的路径是什么 Edit 让我更好地解释一下 我正在处
  • 最佳匹配:错误警告,但输出看起来不错

    我通过 MatchIt 和 optmatch 包执行了最佳匹配 library MatchIt library optmatch data lalonde optimal lt matchit treat age educ black da
  • ionic 2 错误 cordova 不可用

    我正在尝试在新的 ionic 2 项目 最新的 ionic2 版本 中使用 cordova GooglePlus 插件 但我总是遇到有关 cordova 的错误 该插件已正确安装并显示在插件文件夹中 我尝试过的一种方法是 import Go
  • jQuery Fancybox 无法识别元素

    a href https xenogamers org attachment php attachmentid 3655 d 1350682390 img class thumbnail border 0 alt Click image f
  • 将列表的控制台输出转换为真正的 R 列表

    有人刚刚发布了一些控制台输出作为示例 这种情况经常发生 我有将打印输出转换为向量和数据帧的策略 我想知道是否有人有一种优雅的方法将其解析为真正的 R 列表 test lt 1 1 1 0000 1 9643 4 5957 2 1 1 000
  • 定义自定义管道运算符时出现不明确的警告

    在我的过程中我需要执行很多dplyr inner joins 我想我可以为它定义一个自定义管道运算符 如所解释的here https stackoverflow com questions 47475923 custom pipe to s
  • 如何在 iOS 中使用 CIFilter?

    苹果表示 CIFilter 可在 iOS 中使用 但是 在我的 Mac 上 我找不到可链接的 CoreImage 框架 过滤器 可选的核心图像过滤器 提供转换的对象 property 保留 CIFilter 过滤器 即 当我尝试执行类似操作
  • 删除 Plotly 中条形图之间的间隙

    我正在尝试使用 Plotly 在 R 中创建 Marimekko 图表 本质上 这只是一个堆叠的 可变宽度的条形图 两个条形直接相邻 目前 我的尝试如下 创建它的代码在这里 bar test lt plot ly type bar gt l
  • 避免在泛型方法中强制转换为 Nothing

    scala gt def foo U t Any t asInstanceOf U foo U t Any U scala gt val s String foo hi scala gt val n foo hi java lang Cla