2017-04-01 57 views
0

我:斯卡拉类铸件

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

所以问题是怎么投的价值类,如果类名是变量?我不能做

value.asInstanceOf[clazz.type] 

,但我可以打电话给

value.toList 

和它的工作与隐式转换的方法,但我怎么能找到并调用此方法时的className变量?

+0

'asInstanceOf'中的参数不能用变量表示,它是编译时实体。 'clazz.type'值OTOH仅在运行时存在。 –

+0

Thanx,cap。现在的问题是如何在运行时将ArrayBuffer(1,2,3)强制转换为List,但我只有className ... –

+0

我不认为这是明智的,但在这里它是:https:// docs。 oracle.com/javase/7/docs/api/java/lang/Class.html#cast(java.lang.Object) –

回答

1

我不知道一个神奇的方式从ArrayBuffer转换为任何集合,但你可以叫getMethod查找和调用toList方法:

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

例外会如果toList中未发现被扔值。我宁愿评论我的答案,但没有足够的声誉