在 Kotlin 中,如何转换 Int?到整型

2022-09-01 04:23:44

我在 Kotlin 中使用了 a,当我退出它时,返回类型是 .HashMap<Int, Int>getInt?

如何将 转换为 ?Int?Int

到目前为止,我已经尝试使用 ,但这似乎返回了一个 .Int?.toInt()Int?

我正在编写一个斐波那契函数,我的代码看起来像这样:

val fibMemo : Map<Int, Int> = HashMap<Int,Int>()
fun fibN(n:Int) : Int {
    if (n == 0 || n == 1) return 1
    if (fibMemo.containsKey(n))
        // Error here: Type mismatch: inferred type is Int? but Int was expected
        return fibMemo.get(n)?.toInt()
    else {
        val newNum : Int = fibN(n-1) + fibN(n-2)
        fibMemo.put(n, newNum)
        return newNum
    }
}

答案 1

直接回答,使用!! 运算符断言您信任的值不是 null,因此将其类型更改为非 null 等效值。一个简单的示例,显示允许转换的断言(适用于任何可为 null 的类型,而不仅仅是Int?)

val nullableInt: Int? = 1
val nonNullableInt: Int = nullableInt!! // asserting and smart cast

转换值的另一种方法是通过空检查。在上面的代码中没有用,但在其他代码中很有用(请参阅在条件中检查 null):

val nullableInt: Int? = 1
if (nullableInt != null) {
   // allowed if nullableInt could not have changed since the null check
   val nonNullableInt: Int = nullableInt
}

这个问题也通过对可空性问题的惯用处理来回答:在Kotlin中,处理可空值,引用或转换它们的惯用方法是什么


答案 2

为了将 a 转换为使用方法。Int?Intsure()

违规行应如下所示:

return fibMemo.get(n).sure()

对方法的调用是Kotlin的方式(很快就会被特殊语言构造所取代),以确保不可空性。由于Java没有可为空和不可为空的类型表示法,因此我们需要在集成点上小心一些。请阅读 Kotlin 文档中关于空安全的惊人故事。sure()

警告:上述信息不再成立。 已替换为 。请参见: http://blog.jetbrains.com/kotlin/migrating-sure/sure!!


推荐