我有一个Kotlin错误说
Expected 2 parameters of types android.widget.CompoundButton!, kotlin.Boolean
红色波浪线位于下面代码中的第一个{
:
alarmSwitch.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener()
{
fun onCheckedChanged(buttonView: CompoundButton, isChecked: Boolean)
{
我试过了:
buttonView: !CompoundButton,
(说“期待逗号或”)
buttonView: CompoundButton!,
(说“意外令牌”)
buttonView!: CompoundButton,
(说“期待逗号或”)
!buttonView: CompoundButton,
(说“期待逗号或”)
buttonView: CompoundButton?,
(说“预期2个类型的参数android.widget.CompoundButton!,kotlin.Boolean”)
Kotlin官方文件说:
平台类型的表示法
如上所述,平台类型无法明确提及 程序,因此语言中没有语法。 然而,编译器和IDE有时需要显示它们(在 错误消息,参数信息等),所以我们有一个助记符号 对他们来说:
Ť!是指“T或T?”,
(易变)收集!意思是“Java集合 T可能是可变的,也可能是可空的“,
- 数组<(out)T>! 表示“T的Java数组(或T的子类型),可以为空或无”
我不完全理解文档的内容。我该如何解决这个错误?
答案 0 :(得分:1)
我认为您需要创建匿名类对象所需的object关键字(object:
)。
试试这个:
alarmSwitch.setOnCheckedChangeListener(object:OnCheckedChangeListener() {
fun onCheckedChanged(buttonView:CompoundButton, isChecked:Boolean) {
// whatever...
}
})
希望这有帮助
答案 1 :(得分:1)
我们还可以使用lambda表达式简化代码
alarmSwitch.setOnCheckedChangeListener { buttonView, isChecked -> /* whatever...*/ }
https://antonioleiva.com/functional-programming-android-kotlin-lambdas/