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
未在值中找到,将抛出异常。我更愿意评论我的答案,但没有足够的声誉
我有:
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
未在值中找到,将抛出异常。我更愿意评论我的答案,但没有足够的声誉