Kotlin错误:预期2个类型的参数android.widget.CompoundButton!,kotlin.Boolean

时间:2015-12-08 01:33:43

标签: kotlin

我有一个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的子类型),可以为空或无”
  •   

我不完全理解文档的内容。我该如何解决这个错误?

2 个答案:

答案 0 :(得分:1)

我认为您需要创建匿名类对象所需的object关键字(object:)。

请参阅Object declaration

试试这个:

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/