You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin字段旁final关键字含义咨询:@Autowired场景及非open类解析

关于Kotlin中final关键字的两个问题解答

嘿,我来帮你理清这两个关于Kotlin final关键字的疑问,一步步拆解~

1. Kotlin中字段旁的final关键字代表什么?

在Kotlin里,默认情况下所有类的成员(包括字段、方法)都是final的——这个关键字的核心作用是阻止成员被子类重写或重新声明(shadowing),和变量的可变性(val/var)是完全独立的概念:

  • 对于val类型字段:final意味着子类不能重写该字段的getter逻辑,也不能重新定义同名字段覆盖父类字段。
  • 对于var类型字段:final意味着子类既不能重写它的getter/setter方法,也不能声明同名字段来遮蔽父类的字段。

简单说,final管的是“能不能被子类改逻辑”,而val/var管的是“能不能在当前类里重新赋值”。

2. @Autowired final lateinit var controller: CustomController中final的含义

你的类不是open类(不能被继承),这里的final关键字可以从两个角度理解:

语法层面(Kotlin本身)

因为类不是open的,它的所有成员默认就是final的——哪怕你不写final,这个字段也会被默认标记为不可重写。显式写出final更多是代码可读性和意图声明:告诉后续维护者,就算未来这个类被改成open的,这个字段也不应该被子类重写。

Spring注入层面

你可能会疑惑:final字段通常需要构造函数注入,但这里用了lateinit var会不会冲突?其实完全不会——lateinit var允许Spring在类实例化完成后,通过反射注入这个字段。Kotlin的final是编译时限制,反射可以绕过这个限制,所以这个final关键字不会影响Spring的注入行为。

总结下来:这里的final更多是一种明确的代码意图表达,语法上和默认行为一致,但能清晰传递开发者不希望该字段被重写的想法。

内容的提问来源于stack exchange,提问作者m.antkowicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:22:59