java - 有没有办法在 Kotlin 中继承构造函数?

标签 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 个 child ,每个参数都有一个可选值,所以生成的代码不是那么漂亮。

最佳答案

如果总是一样(或者只是扩展),你可以创建一个类来保存参数:

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

关于java - 有没有办法在 Kotlin 中继承构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55647582/

相关文章:

java - Eclipse 仅为某些方法生成 Javadoc

android - 在 Android Things 上手动配置网络适配器

android - 如何让分频器忽略 Jetpack Compose 中父级的填充?

c#构造函数默认参数的正确方式

Java - 列表中的所有元素变得相同

java - 如何查找并跳过单词开头和结尾的特殊字符

java - 如何检查字符串是 'float' 还是 'int'

javascript - 如何将 HTML 元素或 DocumentFragment 附加到 DOM?

c++ - 继承构造函数

java - 如何将文本字段从主类传递到另一个类