我有一个Parent
类,该类由许多子类扩展,并且我想避免在每个子类中复制长构造函数,因为它始终是相同的。
open class Parent(arg1: Any, arg2: Any, arg3: Any...)
class ChildA(arg1: Any, arg2: Any, arg3: Any...): Parent(arg1, arg2, arg3...)
class ChildB(arg1: Any, arg2: Any, arg3: Any...): Parent(arg1, arg2, arg3...)
[...]
是否可以继承Parent
实例化Child
类的构造函数或实现的功能?
我的期望是实现Child
类而不必定义其构造函数。原因是我大约有15个孩子,每个参数都有一个可选值,因此生成的代码不太漂亮。
答案 0 :(得分:1)
如果始终相同(或仅扩展),则可以创建一个用于保存参数的类:
data class ConstructorParams(arg1: Any, arg2: Any, arg3: Any...)
open class Parent(params: ConstructorParams)
class ChildA(params: ConstructorParams) : Parent(params)
class ChildB(params: ConstructorParams, extraParam: Int) : Parent(params)
您可以向其中添加一个帮助程序函数,以在实例化类时避免显式的ConstructorParams
,但它在性能上有所取舍(尽管此版本不适用于Child2
):>
inline fun <reified T : Parent> create(arg1: Any, arg2: Any, arg3: Any...) =
T::class.primaryConstructor.call(ConstructorParams(arg1, arg2, ...))
create<Parent>(1, 2, "")