Kotlin构造函数中传参方法的调用顺序是否有明确保证?
Kotlin构造函数参数中方法调用的执行顺序
好问题!咱们来明确一下你关心的这个Kotlin构造函数里方法调用顺序的问题:
结论先行
是的,checkConsistency()一定会始终先于extractNames()执行,这个顺序是Kotlin语言规范明确保证的,不是偶然行为。
具体原因
Kotlin对于函数(包括构造函数)的实参求值,遵循严格的从左到右顺序:
- 当调用主构造函数
this(...)时,Kotlin会先逐个计算所有实参的结果,计算顺序完全按照参数列表的左到右顺序来 - 在你的二级构造函数里,第一个实参是
sherifs = westerners.checkConsistency(),第二个是names = westerners.extractNames(),所以必然先执行checkConsistency(),完成它的逻辑(打印日志、校验列表、返回数值),之后才会执行extractNames()
验证你的代码
运行你提供的main函数,控制台的输出顺序一定会是:
Checking consistency Extracting names LawAndOrder(sherifs=2, names=[John Wayne, Limonádový Joe])
这也直观地证明了方法调用的顺序是确定的。
额外提示
如果你后续需要依赖这种顺序编写逻辑(比如extractNames()需要依赖checkConsistency()先完成合法性校验,避免处理非法数据),完全可以放心这么做——因为这是语言规范明确规定的行为,不会因为编译器版本或者环境变化而改变。
内容的提问来源于stack exchange,提问作者mpts.cz
相关产品推荐
相关产品推荐

