扩展具有许多参数的类

时间:2017-07-20 12:40:31

标签: kotlin

我有一个名为A的课程:

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

B级延伸A:

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

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

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

如果没有,应该有=)

4 个答案:

答案 0 :(得分:3)

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

我不认为我同意这应该是该语言的一项功能,但如果您认为应该这样做,我建议您在YouTrack开始对话。

答案 1 :(得分:3)

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

IF 在一个类中混合了很多域概念,那么您需要重新设计类,如下所示:

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)

IF 您发现B不是是-A A,那么您必须使用合成而不是继承,例如:

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

class B(val a:A, val d: String)

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您可以为类创建一个通用接口,然后使用委托来完全接近您想要的。像这样:

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