Kotlin中的二级构造函数



一个数据类有两个二级构造函数

data class node(var type: String):parentNode(){
constructor(type: String, value: aNode) : this(type)
constructor(type: String, value: bNode) : this(type)
}

我想从一个函数返回一个值,它是节点(类型:字符串,值:阳极)。

fun getNode(): node{
val aNode = getAnode
val type = "Bank"
val return_val = node(type,aNode)
return (return_val)}
a = getNode()

现在'a'只有'type'而没有'aNode'。你知道我错过了什么吗?

这是因为value不是node类的属性。它只是一个构造函数参数。你需要先把它作为一个属性,然后在构造函数中初始化它。

data class node(var type: String): parentNode() {

var value: parentNode? = null // Assuming aNode and bNode inherit from parentNode
constructor(type: String, value: aNode) : this(type) {
this.value = value
}

constructor(type: String, value: bNode) : this(type) {
this.value = value
}
}

现在您将能够使用a.value访问该值。如果使用主构造函数实例化node类,则a.value将是null

另外,您可能希望将private set添加到value属性中,以便无法从外部修改它。您可以对type属性执行相同的操作(将其设置为val)。大多数情况下,您希望在数据类中使用val属性而不是var属性。

(在创建变量、类、函数等时,建议遵循Kotlin的命名约定)

编辑:正如@gidds所建议的,您还可以在主构造函数中包含value属性,并使用默认值null,并摆脱那些次要构造函数。

data class node(val type: String, val value: parentNode? = null)