gpt4 book ai didi

kotlin - 在Kotlin中将任何内容转换为数组

转载 作者:行者123 更新时间:2023-12-02 06:14:00 31 4
gpt4 key购买 nike

我正在通过从Kotlin的Map<String, Any>加载数据来初始化类。由于此Map是直接从JSON收集的,因此我不确定是否存在任何给定的键,或者它的值是否属于我期望的类型。为了安全地解开此 map 的包装,我正在执行以下操作,这似乎可以正常工作:

a = rawData["A"] as? String ?: ""

其中一些数据位于进一步嵌套的JSON中,我正在将其解压缩到Arrays中。我尝试以相同的方式执行此操作:
b = rawData["B"] as? Array<String> ?: arrayOf<String>()

但是,当我尝试使用数组(如上)时,IntelliJ大惊小怪,说

Warning:(111, 30) Kotlin: Unchecked cast: Any? to Array<String>



这仅仅是让IDE陷入困境,还是这种方法对Arrays而言确实不安全,尽管对于其他类型似乎完全安全?

最佳答案

我已经准备将其称为bug,因为Array是一种经过修饰的类型,这意味着它的泛型参数实际上可以在运行时进行检查(例如,不同于List)。我尝试查看它是否已归档,事实证明编译器实际上是向您显示警告的正确方法。正如您在对this issue的响应中看到的那样,这种类型转换仍然存在可为空性的问题。

val a = arrayOf("foo", "bar", null) as Array<String>
println(a[2].length)

像本例中的数组一样,数组已成功转换(使用 as,它们不引发异常,使用 as?,它们不返回 null),但是,强制转换不能确保这是 Array<String>,只能确保它是 Array<String?>

这意味着您以后可以在强制转换后从键入为 null的变量中读取 Array<String>值,而无需编译器发出进一步的警告。

关于kotlin - 在Kotlin中将任何内容转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45086786/

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