gpt4 book ai didi

kotlin - 为什么 Kotlin 的 null 安全性不能与局部变量初始值设定项一起正常工作?

转载 作者:行者123 更新时间:2023-12-05 01:23:34 28 4
gpt4 key购买 nike

请看这段代码:

fun localVarNullSafety1(){
var number: Double? = 3.0

val sum = 2.0 + number // does not compile (Type mismatch: inferred type is Double? but Double was expected)
}

fun localVarNullSafety1(){
var number: Double? = null

number = 3.0

val sum = 2.0 + number // compiles fine
}

我认为上面的代码由语义相同的函数组成——局部变量不会超出范围,它们对执行线程而言是局部的。在我看来,第一个函数没有理由不编译。

我认为 Kotlin 的智能转换应该考虑变量初始化。

我是否漏掉了一些明显的东西?

最佳答案

这在 KT-13663 中讨论过,并且在撰写本文时它仍然是一张未结票。

他们正在考虑更一般的情况(注意 T?T 的父类(super class)型):

 val x: Supertype = Subtype()
var y: Supertype = Subtype()

并决定在 val 的情况下,x 在此处具有类型 Subtype 没有意义,否则您可以一开始就不要写类型注释。

虽然这对 var 有意义,但如果智能转换仅针对 var 实现,那么 vars vals 的类型会有不一致的行为:

val x: Supertype = Subtype()
var y: Supertype = Subtype()

// inconsistent:
x.someSubtypeStuff() // doesn't work, x is a Supertype
y.someSubtypeStuff() // works, y is smart casted to Subtype

因此他们最终没有为初始化实现智能转换。

由于门票仍然开放,这个功能很可能会在未来的 Kotlin 版本中实现。它可能只支持 var,同时支持 varval,或者只支持可为 null 的类型。让我们抱最好的希望吧!

关于kotlin - 为什么 Kotlin 的 null 安全性不能与局部变量初始值设定项一起正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72289050/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com