父参数的扩展类默认值

问题描述 投票:2回答:3

我的类B的参数xy从类A扩展为参数x,这是可选的(所有参数都不为空)如何定义B它是可选的,并且将使用A

的构造函数中的可选值
val y = 0
val b = if (y == 0) B(y) else B(y, 0)

class B(y: Int, x: Int = 238) : A(x)

open class A(x: Int = 238)

这里我已经在x的构造函数中为B设置了默认值,没有任何方法可以实现这一点而不必在B中设置默认值

kotlin constructor instance instantiation default-parameters
3个回答
2
投票

@ Januson的答案中提出的方法非常好,而且很干净,当您不需要/将在B子类中定义主构造函数时。如果尝试这样做,则会出现编译器错误,因为辅助构造函数必须调用主构造函数,而不能直接调用超类构造函数。

如果B子类需要定义一个主构造函数,则可以解决在Acompanion object中将默认值定义为常量的问题,并在AB的主要构造函数如下:

open class A(val x: Int = DefaultX) {
    companion object {
        val DefaultX:Int = 238;
    }
}

class B(y: Int, x: Int = DefaultX) : A(x)

通过这种方式,您可以定义与Java static final变量等效的变量,范围为A

您应该在A.DefaultX子类中引用超类的B常量,但是在类A和类B中都不需要重复其值]]


2
投票

您可以使用辅助构造函数来实现。


0
投票

在您的情况下,类似的内容可能会对您有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.