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[配置]