Scala Reflection - 从此类类型的类名字符串创建实例

时间:2014-04-16 21:35:04

标签: scala

到处搜索。如何从String(类的名称)创建新实例并返回此实例?确实有答案他们没有回答我怎么能把这个实例转换成我想要的类型。例如:

class ABC
{
  //some code
}

现在我想使用类“ABC”的名称创建一个实例(与val abc = new ABC()相同。)

val mirror = universe.runtimeMirror(getClass.getClassLoader);
val classInstance = Class.forName("ABC");
val classSymbol = mirror.classSymbol(classInstance);
val classType = classSymbol.toType;//println(classType) gives ABC
/******this line does not work*****/
classInstance.newInstance().asInstanceOf[classType];
// not asInstanceOf[ABC]
/***********/

因为classInstance.newInstance()的类型为“Any”,我怎么能将它转换为“ABC”类型? 谢谢!

2 个答案:

答案 0 :(得分:0)

Scala的类型转换语法为x.asInstanceOf[ABC],其中x是您的对象(上面的代码中为classInstance.newInstance()),ABC是类型你投了。注意括号是方形的,而不是圆形 - 这是一个带参数的参数。

答案 1 :(得分:0)

我可能错了,但我认为你所寻找的东西没有意义。假设,为了争论,你可以做到这一点。测试问题是:你打算做什么 next ?编译器显然不知道它是什么类,所以你不能直接调用方法或访问字段。

所以我认为您可能需要使用反射 - Scala或Java - 因此不需要 asInstanceOf