当前位置:  开发笔记 > 编程语言 > 正文

如何使用泛型参数获取Scala运行时类?

如何解决《如何使用泛型参数获取Scala运行时类?》经验,为你挑选了1个好方法。

我想知道是否有可能做以下事情:

import scala.reflect.runtime.universe._
class Bar[T]
def foo[T]()(implicit ctag: reflect.ClassTag[T]) { 
  val clazz = classOf[Bar[ctag.runtimeClass.asInstanceOf[Class[T]]]] 
}

这里Scala编译器抱怨:

error: stable identifier required, but ctag.runtimeClass found.

有没有办法从函数中可用的运行时类型信息中插入类型参数的类类型?



1> Alexey Roman..:

有没有办法从函数中可用的运行时类型信息中插入类型参数的类类型?

classOf[Bar[T]]工作原因很简单:它不会插入任何运行时信息!classOf[Bar[T]],classOf[Bar[String]],classOf[Bar[Int]],classOf[Bar[_]]都是一样的; 这就是JVM上下文中类型擦除的含义(为了避免误导,我更愿意classOf[Bar[_]]在可能的情况下使用).请注意,其实是有一个例外:如果BarArray的,因为classOf[Array[Int]]classOf[Array[Object]](EG)是不同的!

classOf[T] 显然需要运行时信息,所以它不起作用.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有