2
代码示例说明是我的目标为:在斯卡拉在运行时多态性获取类的实例
import scala.reflect.ClassTag
class C[A](implicit ct: ClassTag[A]) {
def inst: A = ct.runtimeClass.newInstance.asInstanceOf[A]
}
val c = new C[String]
c.inst
//=> res8: String = ""
// So far so good
val className = "C"
val typeParam = "String"
如何使用className
和typeParam
在运行时获得的C[String]
一个实例(使用Scala的2.11.5
)?
负责查询分布式系统的类。查询进来后,根据查询动态确定类,然后将查询分发给'N'个节点,确定的类编码为'String'。每个节点都应该实例化这个类。部分挑战在于将其用于使用'className:String'的现有系统。谢谢你的回答,我会试试看! – devth 2015-02-12 03:03:14
一个问题:由此产生的实例类型为“Any”,所以我无法在其上调用我的“inst”方法。我尝试了各种'asInstanceOf'咒语,但没有运气。 – devth 2015-02-12 16:32:05
你是什么意思,类型为“任何”? *静态类型*当然是'Any',但是没有办法绕过:如何从*动态类名*获得* static *类型?如果你确定有这样一个'inst'方法(通过名字),你可以再次使用反射来调用它:'x.getClass.getMethod(“inst”)。invoke(x)'(''x''是结果我的答案中的咒语)。 – sjrd 2015-02-12 16:45:28