scala - 获取常见 AnyVal 类型/基元的 Scala 类型名称
问题描述
在我的 scala 代码中,我有一个Class[_ <: AnyVal]
实例,例如从classOf[Int]
.
当我尝试从此(使用classOf[Int].getName
)获取 scala 类型名称时,我期待看到"scala.Int"
,但我得到的是原始 Java 类型的名称:"int"
如何从我的Class
变量中获取 scala 类型名称,以防我处理 java 原始等效项或默认的盒装 java 等效项(例如java.lang.Integer
)
如果您想知道我为什么需要这个;我正在使用treehugger生成一些scala代码,关于我是否需要生成例如a的信息scala.Int
来自提供a的库Class[_]
解决方案
如果您只想处理原始类型,
def scalaName(cls: Class[_]) =
if (cls.isPrimitive) s"scala.${cls.getName.capitalize}" else cls.getName
不幸的是,Java 标准库并没有(据我所知)提供一种在盒装和原始Class
es 之间进行转换的方法,因此最好的方法是单独处理它们:
val classesMap = Map[Class[_], Class[_]](
classOf[java.lang.Integer] -> classOf[Int],
classOf[java.lang.Short] -> classOf[Short],
...
)
def scalaName1(cls: Class[_]) = scalaName(classesMap.getOrElse(cls, cls))
您可能还想Void.TYPE
专门处理(例如转换为scala.Unit
)。
推荐阅读
- r - 更改 pmml XML 文件 R 的版本
- list - 我们如何在 Prolog 中按顺序添加两个列表的每个元素?
- javascript - 使用表单的下一个和上一个按钮的引导选项卡
- postgresql - 如何通过 REST API 在 GeoServer 中创建 WMS 层?
- selenium - 使用页面对象模型在 Cucumber 中制作动态代码
- javascript - 使用 jQuery 为附加的文本框设置默认值
- c# - 使用特定字段对自定义数组列表进行排序
- ubuntu - 登录后“启动 bpfilter”
- r - 如何在 R 中使用 dplyr 来消除行和重命名因子变量
- ios - 分享有关linkedin 的文章不适用于新的v2 Api