【发布时间】:2020-10-19 01:14:21
【问题描述】:
我有一个类需要一个工厂,当提供一个子类的样本值时,它将创建一个具有子类类的新对象。例如
open class Base(val i:Int){
fun <T:Base>factory(sample:T, n:Int) = Base(i) // need sample." invoke constructor" (i) as T
}
关于如何在使用 Base 的任何子类作为参数调用而不需要添加样板文件或反射超出 KotlinJS 可用的反射以覆盖每个未来子类的工厂时如何使这项工作工作?
【问题讨论】:
-
你需要使用反射来实例化类,并且有一个类契约,
Base的每个子类都必须有一个只有一个n参数的构造函数。这无法在编译时强制执行,因此当类中缺少此类构造函数时,您必须抛出异常。 -
@Tenfour04 ...是的,这也是我遇到的问题,看不到解决方法,希望可能使用注释。可惜,因为在每个子类中压倒一切的 fun factory 都变成了样板
标签: kotlin constructor annotations factory