Scala class 铸造

Scala class casting

我有:

var className = "scala.collection.immutable.List"
val clazz = Class.forName(className)
val value = ArrayBuffer(1, 2, 3)

所以问题是如果 className 是变量,如何将值转换为 class?我做不到

value.asInstanceOf[clazz.type]

但我可以打电话给

value.toList

它使用隐式转换方法完成工作,但是当 className 是变量时我如何找到并调用此方法?

我不知道从ArrayBuffer转换为任何集合的神奇方法,但是你可以调用getMethod定位并调用toList方法:

val method = value.getClass.getMethod("toList")
method.invoke(value)  

如果 toList 未在值中找到,将抛出异常。我更愿意评论我的答案,但没有足够的声誉