kotlin - 如何在 Kotlin 中将 Any 转换为 Int

标签 kotlin

我的模型中有一个如上定义的属性,在某些情况下包含一个 Int。

var value: Any?

我知道如果我先转换为 String,然后转换为 Int,我可以做到

value.toString().toInt() // works

有没有办法通过之前跳过转换为字符串来做到这一点? 当我尝试直接转换为 Int 时,出现此错误

FATAL EXCEPTION: main
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

最佳答案

问题是您试图使用 value as Int 将字符串直接转换 到 Int。 .

这不起作用,因为正如异常告诉你的那样,value包含一个字符串,并且不能将一个字符串强制转换为一个 Int。这个字符串表示一个整数的事实并不重要,因为它需要被解析成一个 Int。这正是 toInt()方法可以。

您必须首先转换为字符串的原因是因为 toInt()是 String 的扩展方法,valueAny? 类型.这意味着您不能调用toInt()直接上value因为它在编译时不知道它包含一个字符串,即使它在运行时也是如此。如果你想跳过这一步,你也可以先检查类型来使用智能转换:

if (value is String) {
    value.toInt()
}

您可以在此处找到有关智能转换和其他 Kotlin 类型转换的更多信息:https://kotlinlang.org/docs/reference/typecasts.html#smart-casts

这也可能指向潜在的设计问题。您希望它有时包含一个 Int,但正如我们在这里看到的,在您的模型中设置此值的任何内容都是将其设置为包含该数字的字符串。您是否希望这个值真正能够包含许多不同的类型,或者您只希望 Int 和 String?如果是后者,那么将其设为 String 而不是 Any? 可能是更好的设计决策。 .这将防止提供意外/未处理的类型,并使模型对任何查看或使用它的人来说不那么模棱两可。

关于kotlin - 如何在 Kotlin 中将 Any 转换为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43876910/

相关文章:

java - Flux 完成时获取 Flux 大小

android - 格式 @Query 参数 - Retrofit 2

android - 如何修改Android快捷方式标题?

android - Koin: NoBeanDefFoundException, 检查你的模块定义

C# 中 "with"关键字的 Kotlin 等价物(数据类)

java - Volley : Kotlin Class call from JavaCode

kotlin - Kotlin 的 DAO 应该返回 Optional 还是 null?

android - Kotlin 中的按钮数组

android - 如何使用 okhttp 身份验证器一次多次请求刷新 token

java - RecyclerView项目的图像错误