在我的Scala代码中,我有一个utf16
实例,例如从Class[_ <: AnyVal]
获得的实例。
当我尝试从中获取scala类型名称(使用classOf[Int]
时,我期望看到classOf[Int].getName
,但是我却得到了原始Java类型的名称:"scala.Int"
如果我要处理的是Java原语等效项或默认的盒装Java等效项(例如"int"
),如何从Class
变量中获取scala类型名称
万一您想知道为什么我会需要这个;我正在使用treehugger生成一些scala代码,以及有关是否需要生成例如java.lang.Integer
来自提供scala.Int
答案 0 :(得分:1)
如果您只想处理原始类型,
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
)。