在 Kotlin 中,我们val认为这是最终的,不能改变。例如
val something = "Something"
Run Code Online (Sandbox Code Playgroud)
如果稍后初始化的值,我们使用lateinit var.
lateinit var something: String
Run Code Online (Sandbox Code Playgroud)
但这var不是val. 我想设置一次(不是在构造函数中),并将其作为最终设置。我怎么能做到这一点?
读入 Kotlin 的约定(一个最终的后期初始化变量)是不可能的。
考虑它的用例:
通常,声明为非空类型的属性必须在构造函数中初始化。然而,这通常并不方便。例如,可以通过依赖项注入或在单元测试的设置方法中初始化属性。在这种情况下,您不能在构造函数中提供非 null 初始值设定项,但您仍然希望在引用类体内的属性时避免 null 检查。
lateinit var在处理可能尚未初始化的变量时提供相对的理智,例如注入字段的情况(如 Spring 和@Autowired)。然后,严格来说,在依赖注入的上下文中,如果您没有办法在编译时具体实例化变量,那么您不能将其保留为最终字段。
从 Java 到 Kotlin 世界,将后期初始化的变量作为 Final 引入看起来就像 Spring 中的这样自相矛盾:
@Autowired
private final Interface something;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |