有没有一种方法可以在Kotlin中继承构造函数?

时间:2019-04-12 08:35:28

标签: java kotlin constructor

我有一个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个孩子,每个参数都有一个可选值,因此生成的代码不太漂亮。

1 个答案:

答案 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, "")