【发布时间】:2019-04-11 16:41:15
【问题描述】:
我从 Packt 的“Programming Kotlin”中获得了这个(人为的)示例,关于使用带有继承的辅助构造函数。
编辑:从答案中可以清楚地看出问题与backing field 有关。但这本书并没有介绍这个想法,只是用了错误的例子。
open class Payment(val amount: Int)
class ChequePayment : Payment {
constructor(amount: Int, name: String, bankId: String) : super(amount) {
this.name = name
this.bankId = bankId
}
var name: String
get() = this.name
var bankId: String
get() = this.bankId
}
val c = ChequePayment(3, "me", "ABC")
println("${c} ${c.amount} ${c.name}")
当我运行它时会显示此错误。
$ kotlinc -script class.kts 2>&1 | more
java.lang.StackOverflowError
at Class$ChequePayment.getName(class.kts:10)
at Class$ChequePayment.getName(class.kts:10)
at Class$ChequePayment.getName(class.kts:10)
第10行好像是无限递归,怎么解决?
【问题讨论】:
-
太糟糕了,Packt 的材料包含非工作示例
-
哎哟。这不是一个好兆头......另外,我知道这是为了示例,但您可能会为此使用主构造函数。
-
有点,但对于不熟悉字段关键字(或 Kotlin 中的属性而不是字段)概念的新手来说,这个错误是神秘的。这些链接确实有助于澄清这一点。
标签: kotlin