Kotlin中的强制转换变量的范围是什么?

Eitanos30

当在assign的右侧强制转换变量时,我惊讶地意识到该变量仍然表现为强制类型,而不是最初定义的类型。我是在做错什么还是编译器问题?

码:

val hippoList = listOf<Hippo>(Hippo())
val hippoMutableList : MutableList<Hippo> = hippoList as MutableList<Hippo>
hippoList.add(Hippo())

由于hippoList来自List类型,因此它是不可变的。那么,如何在不可变类型上运行add函数不会导致编译错误?

szymon_pr

如果要进行强制转换,则意味着您不仅仅对编译器了解这种执行上下文,而且还告诉编译器此hippoList是MutableList,所以在每次使用hippoList时,编译器都已经知道该对象必须是MutableList并允许您使用addmethod,因为您之前已将其强制转换为MutableList。实际上,您会收到一个运行时错误UnsupportedOperationException,这意味着您实际上对执行上下文一无所知,并且做错了什么。因此,与其使用自己的强制转换,不如让编译器来完成它。

在您的情况下,而不是强制转换为MutableList,请使用以下命令将hippoList转换为MutableList hippoList.toMutableList()

当您使用!!从可为null的类型到非null的类型时,或者当您对编译器了解的执行上下文了解更多时,也会发生相同的情况这是一个小例子

val someNullableType: String? = null
val thisStringIsNotNull = someNullableType!!

通过使用 !!在someNullableType上,我们告诉编译器someNullableType也不为null,因此我们被允许写(例如,在您告诉您List也是MutableList的情况下)

someNullableType.length

但是我们会更早收到异常(在我们使用!!来调整编译器的地方)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python中参数变量的范围是什么?

来自分类Dev

Kotlin控制台中定义的变量范围是什么?

来自分类Dev

Lua变量的范围是什么?

来自分类Dev

Lua变量的范围是什么?

来自分类Dev

Rails控制器中实例变量的范围是什么?

来自分类Dev

Angular中模板引用变量的范围是什么?

来自分类Dev

Unix shell变量中“导出”的范围是什么?

来自分类Dev

Python和鼻子:“测试类”中的变量范围是什么?

来自分类Dev

javascript 中语句头的局部变量的范围是什么?

来自分类Dev

显式强制转换运算符中的void *是什么?它的用途是什么?

来自分类Dev

ES6中的函数范围变量(var)和块范围变量是什么?

来自分类Dev

imshow()中的范围是什么?

来自分类Dev

Firebase安全规则变量的范围是什么?

来自分类Dev

将包含多个变量的文本变量转换为R中的单独变量的最佳方法是什么?

来自分类Dev

我可以在块范围内强制转换变量吗?

来自分类Dev

Kotlin在IDE中“无需强制转换”

来自分类Dev

从二进制流读取时,将double变量的地址强制转换为char *是什么意思?

来自分类Dev

在bash中,下划线变量后跟范围是什么意思:$ _ {0..10}

来自分类Dev

空手道tfw中if语句中的变量范围是什么?

来自分类Dev

角度链接函数中作用域变量的作用范围是什么?

来自分类Dev

Perl中的@ $变量是什么?

来自分类Dev

函数中的变量“ ....”是什么?

来自分类Dev

在java中进行强制转换的原因是什么?

来自分类Dev

RavenDB中WaitForNonStaleResultsAsOfNow的范围是什么

来自分类Dev

rgb中的肤色范围是什么?

来自分类Dev

PHP中GLOBAL的作用范围是什么?

来自分类Dev

rgb中的肤色范围是什么?

来自分类Dev

AngularJS中ngModel指令的范围是什么?

来自分类Dev

Winsock中SOCKET对象的范围是什么?

Related 相关文章

  1. 1

    python中参数变量的范围是什么?

  2. 2

    Kotlin控制台中定义的变量范围是什么?

  3. 3

    Lua变量的范围是什么?

  4. 4

    Lua变量的范围是什么?

  5. 5

    Rails控制器中实例变量的范围是什么?

  6. 6

    Angular中模板引用变量的范围是什么?

  7. 7

    Unix shell变量中“导出”的范围是什么?

  8. 8

    Python和鼻子:“测试类”中的变量范围是什么?

  9. 9

    javascript 中语句头的局部变量的范围是什么?

  10. 10

    显式强制转换运算符中的void *是什么?它的用途是什么?

  11. 11

    ES6中的函数范围变量(var)和块范围变量是什么?

  12. 12

    imshow()中的范围是什么?

  13. 13

    Firebase安全规则变量的范围是什么?

  14. 14

    将包含多个变量的文本变量转换为R中的单独变量的最佳方法是什么?

  15. 15

    我可以在块范围内强制转换变量吗?

  16. 16

    Kotlin在IDE中“无需强制转换”

  17. 17

    从二进制流读取时,将double变量的地址强制转换为char *是什么意思?

  18. 18

    在bash中,下划线变量后跟范围是什么意思:$ _ {0..10}

  19. 19

    空手道tfw中if语句中的变量范围是什么?

  20. 20

    角度链接函数中作用域变量的作用范围是什么?

  21. 21

    Perl中的@ $变量是什么?

  22. 22

    函数中的变量“ ....”是什么?

  23. 23

    在java中进行强制转换的原因是什么?

  24. 24

    RavenDB中WaitForNonStaleResultsAsOfNow的范围是什么

  25. 25

    rgb中的肤色范围是什么?

  26. 26

    PHP中GLOBAL的作用范围是什么?

  27. 27

    rgb中的肤色范围是什么?

  28. 28

    AngularJS中ngModel指令的范围是什么?

  29. 29

    Winsock中SOCKET对象的范围是什么?

热门标签

归档