在 Scala 2.10 中通过反射查找类型参数?

2023-11-22

使用类型标签,我能够see某种类型的参数:

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> typeOf[List[Int]]
res0: reflect.runtime.universe.Type = List[Int]

但我只是不太清楚如何以通用方式以编程方式从那里获取“Int”。

(我已经在 REPL 中闲逛了一个小时,尝试对 Type 进行排列,看看我能从中获得什么......我得到了很多东西表明这是一个“列表”,但祝你好运那个“Int”!而且我真的不想解析 toString() 输出......)

丹尼尔·索布拉尔(Daniel Sobral)(像往常一样)提供了出色的快速概述here,其中他非常接近我正在寻找的内容,但是(显然)只有当您碰巧知道对于该特定类,某些可以询问其类型的特定方法时:

scala> res0.member(newTermName("head"))
res1: reflect.runtime.universe.Symbol = method head

scala> res1.typeSignatureIn(res0)
res2: reflect.runtime.universe.Type = => Int

但我希望有一些更通用的东西,这不涉及在声明的方法列表中查找并希望其中之一能够捕获(从而泄露)标签的当前类型信息。

如果 Scala 可以如此轻松print“List[Int]”,为什么在不诉诸字符串模式匹配的情况下发现其中的“Int”部分如此困难?或者我只是错过了一些非常非常明显的东西?

scala> res0.typeSymbol.asInstanceOf[ClassSymbol].typeParams
res12: List[reflect.runtime.universe.Symbol] = List(type A)

scala> res12.head.typeSignatureIn(res0)
res13: reflect.runtime.universe.Type = 

Grr...


从...开始Scala 2.11,您可以简单地使用:

yourGenericType.typeArgs.head

See the 宏变更日志点号 14。

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

在 Scala 2.10 中通过反射查找类型参数? 的相关文章

随机推荐

  • 获取 foreach 循环中的下一个元素

    我有一个 foreach 循环 我想查看循环中是否有下一个元素 以便我可以将当 前元素与下一个元素进行比较 我怎样才能做到这一点 我已阅读有关当前和下一个功能的信息 但我不知道如何使用它们 一种独特的方法是反转数组并then环形 这也适用于
  • TRestClient/TRestRequest 错误地解码 gzip 响应

    我尝试读取 REST API 它是 gzip 编码的 确切地说 我尝试阅读 StackExchange API 我已经找到问题了自动解码 TRESTResponse 中的 GZIP 但由于某种原因 这个答案并不能解决我的问题 测试设置 在X
  • 即使已处理异常,在 VS2010 调试器中也会出现未处理的异常

    我在使用 VS2010 时遇到一个问题 调试器因未处理的异常而停止 不过 异常肯定是得到处理的 事实上 如果我将代码放入 catch 块中 当我按 F5 时就会命中它 在 调试 gt 异常 中 我肯定会这样做not选中 抛出 复选框 因此
  • 挥发性与原子性[重复]

    这个问题在这里已经有答案了 我在下面的某处读到 Java volatile 关键字并不意味着原子 这是它的常见误解 声明 volatile 后 操作将是原子的 以使 您仍然需要使用原子操作来确保独占访问synchronizedJava 中的
  • WCF平台是否独立?

    我只需要知道 WCF 是否像 Webservices 一样与平台无关 Java和Php可以访问WCF中的函数吗 Thanks 是的 当然 WCF 本身只能在 Windows 上运行 但它提供的服务可以从任何其他语言 工具访问 使用 WCF
  • 我可以在基类中重载纯虚方法吗?

    在下面的示例中 我有一个带有纯虚方法 又名 FUN1 和普通方法 又名 FUN2 的抽象类 include
  • 使用返回 impl 特征的泛型函数“借用的值寿命不够长”

    我从这个 Rust 代码中得到一个意外的错误 struct Container lt a gt x a i32 trait Reply impl Reply for i32 fn json
  • For 循环内的 Postgresql 更新

    我对 postgresql 还很陌生 并且在使用 for 循环更新表中的空值列时遇到问题 我正在处理的表格很大 因此为了简洁起见 我将给出一个较小的示例来说明要点 采取下表 id A B C a 1 0 NULL b 1 1 NULL c
  • 如何刷新列表框的数据源

    表单有1个Combobox和1个ListBox 单击 添加 按钮时 我想将组合框中的所选项目添加到列表框中 public partial class MyForm Form List
  • 关闭电脑

    有没有办法使用内置的 Java 方法关闭计算机 创建您自己的函数以通过以下方式执行操作系统命令命令行 举个例子 但正如其他人指出的那样 知道您想要在何处以及为何使用它 public static void main String arg t
  • 如何在 Spring 控制器中检索 FORM/POST 参数?

    我有以下回应 应该来自邮件黑猩猩网络钩子 URL 这是行正文 RAW BODY type usub fired at 2015 07 23 17 3A19 3A34 data 5Baction 5D unsub data 5Breason
  • 禁用 PHPhotoLibrary 中删除请求的确认

    我想做的是将视频保存到 PHPhotoLibrary 然后在应用程序中上传到客户端远程服务器完成时删除它们 基本上 照片库充当临时存储 以添加额外的安全层 以防万一发生任何故障 我已经将我的视频保存在应用程序目录中 Problem 问题是要
  • 使用 Java 从 Github 下载二进制文件

    我正在尝试下载此文件 http github com downloads TheHolyWaffle ChampionHelper ChampionHelper 4 jar 用下面的方法 它似乎不起作用 我收到一个空 损坏的文件 Strin
  • 有没有办法使用curse在同一终端上创建单独的显示和输入?

    我想编写一个命令行程序来生成以下用户界面 A B A 是一个单独的进程 它循环并显示实时事件列表 它会自动刷新 B 是命令提示符 它固定在底部并有命令历史记录 我知道一些命令行 IRC 程序会执行此操作 因此它一定是可能的 如果您能给我一个
  • Stargazer 输出是代码,而不是表格

    我正在尝试使用 RStudio 中的 stargazer 包来生成数据汇总表 由于某种原因 当我使用 html 或 Latex 代码时 我无法查看输出中的表格 但当我输出为文本时 我可以看到它 一个例子 library stargazer
  • 类型错误:google.visualization.DataTable 不是构造函数

    在我的网页上有一个谷歌地图 以及三个图表 当页面加载时 地图很好 但图表要么不加载 要么只有一两个加载 不断收到错误 TypeError google visualization DataTable 不是构造函数 function load
  • 获取返回 StreamedContent 的 的具体 URL

    为了使用灯箱 我需要一个指向由以下命令生成的图像的链接
  • 如何在另一个 groovy 脚本中简单地导入 groovy 文件

    groovy tree lib GTemplate class GTemplate groovy Simple groovy class GTemplate static def toHtml this newInstance toHtml
  • Android 中的 Base64 图像转换导致图像损坏

    我需要将 JSON 上传到服务器 因此我尝试使用 base64 对其进行编码 然后通过 JSON 发送它 但在服务器端解码图像时 图像显示已损坏 我什至尝试过在线 Base64 到图像转换器 结果是相同的 这是我的活动代码 在从图库或相机中
  • 在 Scala 2.10 中通过反射查找类型参数?

    使用类型标签 我能够see某种类型的参数 scala gt import scala reflect runtime universe import scala reflect runtime universe scala gt typeO