我只是到处搜索。我如何从String(类名)创建一个新示例并返回这个示例?确实有答案,但他们没有回答我如何将这个示例转换为我想要的类型。例如:
class ABC
{
//some code
}
现在我想创建一个示例,使用类的名称“ABC”(与瓦尔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”类型呢?谢谢!
3条答案
按热度按时间f45qwnt81#
Scala的类型转换语法是
x.asInstanceOf[ABC]
,其中x
是你的对象(在上面的代码中是classInstance.newInstance()
),ABC
是你要转换的类型。注意,括号是方括号,而不是圆括号--这是一个无参数的方法,需要一个类型参数。hjzp0vay2#
我可能错了,但我认为你要找的东西没有意义。为了论证起见,假设你可以这样做。测试题是:你下一步要做什么?编译器显然不知道它是什么类,所以你不能直接调用方法或访问它的字段。
因此,我认为您可能需要使用反射(Scala或Java),因此不需要 asInstanceOf。
vh0rcniy3#
目前您可以使用白盒宏。它可以返回比声明的更精确的类型
第一个
How to obtain a Trait/Class from a string with its name