对 BootsrapButton 的智能转换是不可能的,因为 endtrip 是此时已更改的可变属性

尼亚加卡·伊诺克

我是 Kotlin 的新手。我有一个 android 项目,我选择将其转换为 kotlin。这是我的一段代码。

import com.beardedhen.androidbootstrap.BootstrapButton
class EndTrip : AppCompatActivity(){
internal var endtrip: BootstrapButton ?=  null

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_end_trip)
endtrip.setOnClickListener(View.OnClickListener {
//Some code here
}
}
}

但是我在旅行中遇到了这个错误

智能转换到 BootsrapButton 是不可能的,因为 endtrip 是此时已更改的可变属性

已在此处回答类似的问题但我无法找出解决方案。我正在使用beardedhen Android Bootstrap 库谢谢你。

巴卡威

该错误告诉您,您无法保证endtrip该行代码不为空。原因是它endtrip是一个var. 它可以被其他线程改变,即使您在使用该变量之前进行了空检查。

下面是官方文档的解释:

请注意,当编译器无法保证变量在检查和使用之间不会更改时,智能转换不起作用。更具体地说,智能转换适用于以下规则:

  • val局部变量 - 始终;
  • val属性 - 如果属性是私有的或内部的,或者检查是在声明属性的同一模块中执行的。智能强制转换不适用于具有自定义 getter 的开放属性或属性;
  • var局部变量 - 如果变量在检查和使用之间没有被修改,并且没有被修改它的 lambda 捕获;
  • var属性 - 从不(因为该变量可以随时被其他代码修改)。

最简单的解决方案是使用安全呼叫运营商 ?.

endtrip?.setOnClickListener(View.OnClickListener {
    //Some code here
}

建议阅读:在 Kotlin 中,处理可为空值、引用或转换它们的惯用方法是什么

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法将类型强制转换为“ ListViewModel”,因为“ binding.listViewModel”是一个可变的属性,此时可能已更改

来自分类Dev

Kotlin“无法进行智能投射,因为此时属性可能已更改”

来自分类Dev

智慧型转换是不可能的,因为...是一个可变的属性,本来可能已经改变了

来自分类Dev

聪明地投射到“位图!” 这是不可能的,因为'bitmap1'是一个可变的属性,这一次可能已经更改了

来自分类Dev

更改不可变类型的属性

来自分类Dev

不可能更改gitlab项目网址

来自分类Dev

错误:“无法智能转换为字符串,因为“消息”是可变属性”

来自分类Dev

无法将类型强制转换为“类型”,因为“变量”是可变属性,到那时可能已经更改了

来自分类Dev

智能投射到“位图!” 是不可能的,因为 'textBitmap' 是一个局部变量,由变化的闭包捕获

来自分类Javascript

为什么不可能从原型更改构造函数?

来自分类Dev

Tkinter标签中的不可能更改文本

来自分类Dev

不可能访问字符串变量上的属性

来自分类Dev

使用动态类型而不是不可能的通用属性

来自分类Dev

Symfony不可能访问null变量上的属性(“ nameArticle”)

来自分类Dev

不可能完成的任务:jQuery属性选择器

来自分类Dev

向属性添加匿名数组。不可能?

来自分类Dev

在某些情况下是否不可能创建不可变的对象图?

来自分类Dev

使用Moose在不可变的类中更改属性值

来自分类Dev

提升属性已更改,因为索引器不起作用

来自分类Java

可变的蚂蚁不可变属性

来自分类Dev

使用as-binding破坏可变参数函数:不可能吗?

来自分类Dev

借用 self 作为可变的并且不可能借用 self 的成员?

来自分类Dev

通过指针更改私有数据成员是不可能的?

来自分类Dev

是否不可能在客户端永久更改客户端的Web代码?

来自分类Dev

为什么包含不可能的条件分支会更改此方法的返回值?

来自分类Dev

Symfony2不可能通过会话访问NULL变量上的属性

来自分类Dev

可以将此不可变属性转换为自动属性吗?

来自分类Dev

为什么 Typescript 在 useMemo 中说 X 可能是未定义的,而此时它永远不可能是未定义的

来自分类Dev

为什么我的crontab用户文件是不可变的,而且即使将属性更改为可变后也无法执行?

Related 相关文章

  1. 1

    无法将类型强制转换为“ ListViewModel”,因为“ binding.listViewModel”是一个可变的属性,此时可能已更改

  2. 2

    Kotlin“无法进行智能投射,因为此时属性可能已更改”

  3. 3

    智慧型转换是不可能的,因为...是一个可变的属性,本来可能已经改变了

  4. 4

    聪明地投射到“位图!” 这是不可能的,因为'bitmap1'是一个可变的属性,这一次可能已经更改了

  5. 5

    更改不可变类型的属性

  6. 6

    不可能更改gitlab项目网址

  7. 7

    错误:“无法智能转换为字符串,因为“消息”是可变属性”

  8. 8

    无法将类型强制转换为“类型”,因为“变量”是可变属性,到那时可能已经更改了

  9. 9

    智能投射到“位图!” 是不可能的,因为 'textBitmap' 是一个局部变量,由变化的闭包捕获

  10. 10

    为什么不可能从原型更改构造函数?

  11. 11

    Tkinter标签中的不可能更改文本

  12. 12

    不可能访问字符串变量上的属性

  13. 13

    使用动态类型而不是不可能的通用属性

  14. 14

    Symfony不可能访问null变量上的属性(“ nameArticle”)

  15. 15

    不可能完成的任务:jQuery属性选择器

  16. 16

    向属性添加匿名数组。不可能?

  17. 17

    在某些情况下是否不可能创建不可变的对象图?

  18. 18

    使用Moose在不可变的类中更改属性值

  19. 19

    提升属性已更改,因为索引器不起作用

  20. 20

    可变的蚂蚁不可变属性

  21. 21

    使用as-binding破坏可变参数函数:不可能吗?

  22. 22

    借用 self 作为可变的并且不可能借用 self 的成员?

  23. 23

    通过指针更改私有数据成员是不可能的?

  24. 24

    是否不可能在客户端永久更改客户端的Web代码?

  25. 25

    为什么包含不可能的条件分支会更改此方法的返回值?

  26. 26

    Symfony2不可能通过会话访问NULL变量上的属性

  27. 27

    可以将此不可变属性转换为自动属性吗?

  28. 28

    为什么 Typescript 在 useMemo 中说 X 可能是未定义的,而此时它永远不可能是未定义的

  29. 29

    为什么我的crontab用户文件是不可变的,而且即使将属性更改为可变后也无法执行?

热门标签

归档