2017-04-01 100 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中未發現被扔值。我寧願評論我的答案,但沒有足夠的聲譽