一个数据类有两个二级构造函数
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)