用多参数扩展类

我有一个叫做A的类:

open class A (a: String, b: String, c: String) 

而一个扩展了A的类B:

 class B(a: String, b: String, c: String, d: String) : A(a, b, c) 

我的问题是,如果有办法做这样的事情,为了避免在B构造函数中声明A的所有参数:

 class B(super, d:String) : A(super) 

如果不是,应该有=)

您可以为这些类创建一个通用的接口,然后使用委派来完成您想要的任务。 喜欢这个:

 interface C { val a: String val b: String val c: String } class A(override val a: String, override val b: String, override val c: String) : C class B(c: C, val d: String) : C by c 

这样做,你可以像这样实例化一个B

 val b = B(A("1", "2", "3"), "4") 

不 ,Kotlin不包含任何允许您简化与超类参数匹配的构造函数参数的构造。

我不认为我同意这应该是该语言的一个function,但是我建议如果您认为应该在YouTrack上开始对话。

当你遇到这个问题时,你应该问自己为什么这样的类需要很多参数/依赖,而不是通过语言语法找出解决方案。 也许它的责任是不清楚的。

如果在一个类中混合了许多领域概念,那么你需要重新设计你的类,如下所示:

 data class C(val a: String, val b: String, val c: String) open class A(val c:C) class B(c:C, val d: String) : A(c) 

如果你发现B不是-A A ,那么你必须使用组合而不是inheritance,例如:

 open class A (a: String, b: String, c: String) class B(val a:A, val d: String) 

不,没有这样的方式。 不幸的是,你需要手动执行此操作