Scala:需要使用接受参数的反射创建类的新实例

Scala:需要使用接受参数的反射创建类的新实例,scala,reflection,constructor,Scala,Reflection,Constructor,这里的Configuration是一个父抽象类,它有一些子类 因此类配置中的第二个参数可以是任何子类配置 class Config(sourceName :String, storeClass :Class[_]) { def store = storeClass.getConstructor(classOf[Configuration]).newInstance(sourceName) def write(k :String, v :String) { store.write

这里的
Configuration
是一个父抽象类,它有一些子类

因此
类配置
中的第二个参数可以是任何子
类配置

class Config(sourceName :String, storeClass :Class[_]) {

  def store = storeClass.getConstructor(classOf[Configuration]).newInstance(sourceName)

  def write(k :String, v :String) {
   store.writeTo(k,v)
  }

  def read(k :String): Unit ={
   store.readFrom(k)
  }

  def contains(k :String) :Boolean ={
   store.isContains(k)
  }
}
每个子类在初始化ie时取一个参数<代码>源名称

class Config(sourceName :String, storeClass :Class[_]) {

  def store = storeClass.getConstructor(classOf[Configuration]).newInstance(sourceName)

  def write(k :String, v :String) {
   store.writeTo(k,v)
  }

  def read(k :String): Unit ={
   store.readFrom(k)
  }

  def contains(k :String) :Boolean ={
   store.isContains(k)
  }
}
返回类型上方的代码:
Any
,这会产生问题,因为我需要它的类型为
配置

storeClass.getConstructor(classOf[Configuration]).newInstance(sourceName)

必须是
配置类型
,否则
读取
写入
包含
将无法工作

使用
.asInstanceOf[Configuration]
进行强制转换。使用反射时,您必须期望破坏类型安全。

使用
强制转换它。asInstanceOf[Configuration]
。使用反射时,您必须期望破坏类型安全。

方法选择一个接受您提供的类参数的构造函数。从代码中可以看出,您需要一个接受
字符串的构造函数,因此您可能需要执行以下操作:

def store :Configuration  

但我不确定这是否是你试图解决的问题的理想解决方案。运行时反射和
Class[\u]
对象不是很像Scala…

方法选择一个构造函数,该构造函数接受您提供的类的参数。从代码中可以看出,您需要一个接受
字符串的构造函数,因此您可能需要执行以下操作:

def store :Configuration  

但我不确定这是否是你试图解决的问题的理想解决方案。运行时反射和
类[\u]
对象不是很像Scala…

那么参数sourceName呢?它呢?只需强制转换
.newInstance(sourceName)
的结果,因此该行以
.newInstance(sourceName).asInstanceOf[Configuration]
结尾。那么参数sourceName呢?它呢?只需强制转换
.newInstance(sourceName)
的结果,因此该行以
.newInstance(sourceName).asInstanceOf[Configuration]
结尾。这应该是一个基本错误。getConstructor(classOf[String]).newInstance(sourceName)。asInstanceOf[Configuration]应该是一个基本错误。getConstructor(classOf[String])。newInstance(sourceName).asInstanceOf[配置]