【问题标题】:Scala class castingScala 类强制转换
【发布时间】:2017-04-01 11:56:11
【问题描述】:

我有:

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

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

value.asInstanceOf[clazz.type]

但我可以打电话

value.toList

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

【问题讨论】:

  • asInstanceOf 中的参数不能用变量表示,它是一个编译时实体。 clazz.type 值 OTOH 仅在运行时存在。
  • 谢谢,帽子。问题是当我只有 className 时如何在运行时将 ArrayBuffer(1, 2, 3) 转换为 List ...
  • 我不认为你这样做是明智的,但这里是:docs.oracle.com/javase/7/docs/api/java/lang/…

标签: scala class casting implicit


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 2017-10-05
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    相关资源
    最近更新 更多