我有一种情况,我必须获取在 Scala 中动态生成的类的完全限定名称。这是我到目前为止所拥有的。
import scala.reflect.runtime.universe
import scala.tools.reflect.ToolBox
val tb = universe.runtimeMirror(getClass.getClassLoader).mkToolBox()
val generatedClass = "class Foo { def addOne(i: Int) = i + 1 }"
tb.compile(tb.parse(generatedClass))
val fooClass:String = ???
显然这只是一个玩具示例,但我只是不知道如何获得 Foo 的完全限定名称。我尝试将包声明粘贴到代码中,但在调用tb.compile
.
有谁知道如何获得完全限定的类名或(甚至更好)指定 Foo 编译的包?
谢谢
编辑
使用提出的解决方案后,我能够获得类名。然而,下一步是注册这个类以便稍后采取一些行动。具体来说,我正在尝试利用 Apache Spark 中的UDTRegistration来处理我自己的自定义UserDefinedType。当我手动创建所有类型时,此策略效果很好,但是,我想使用它们来扩展我可能不知道的其他类型。
在阅读完这篇文章之后,使用在运行时使用反射编译的代码似乎无法实现我想要做的事情。也许更好的解决方案是使用 Scala 宏,但我对那个领域很陌生。