作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!