Android 在Kotlin中创建SAM接口实例时,为什么需要在接口名称后加括号?
根据,创建SAM接口实例的语法如下所示:Android 在Kotlin中创建SAM接口实例时,为什么需要在接口名称后加括号?,android,kotlin,single-abstract-method,object-expression,Android,Kotlin,Single Abstract Method,Object Expression,根据,创建SAM接口实例的语法如下所示: val runnable = Runnable { println("This runs in a runnable") } customRatingBar.onRatingBarChangeListener = OnRatingBarChangeListener {ratingBar: RatingBar, rating: Float, _: Boolean -> if (rating < 0.5f) rati
val runnable = Runnable { println("This runs in a runnable") }
customRatingBar.onRatingBarChangeListener = OnRatingBarChangeListener
{ratingBar: RatingBar, rating: Float, _: Boolean -> if (rating < 0.5f) ratingBar.rating = 0.5f}
可以看出,接口名称Runnable
后面没有括号
尽管如此,当我尝试创建这样的实例时:
val runnable = Runnable { println("This runs in a runnable") }
customRatingBar.onRatingBarChangeListener = OnRatingBarChangeListener
{ratingBar: RatingBar, rating: Float, _: Boolean -> if (rating < 0.5f) ratingBar.rating = 0.5f}
无论如何,我不明白如果Kotlin的文档中另有说明,为什么需要括号
非常感谢你的帮助 这是因为您在下一行开始使用大括号,所以它无法判断lambda是否是第一个表达式的一部分。它将lambda解释为下一行的独立表达式 顺便说一句,使用SAM转换的更方便的方法将允许您跳过编写接口名称:
customRatingBar.setOnRatingBarChangeListener { ratingBar, rating, _ ->
if (rating < 0.5f) ratingBar.rating = 0.5f
}
customRatingBar.setOnRatingBarChangeListener{ratingBar,rating,->
如果(额定值<0.5f)额定值bar.rating=0.5f
}
这是因为您在下一行开始使用大括号,所以它无法判断lambda是否是第一个表达式的一部分。它将lambda解释为下一行的独立表达式
顺便说一句,使用SAM转换的更方便的方法将允许您跳过编写接口名称:
customRatingBar.setOnRatingBarChangeListener { ratingBar, rating, _ ->
if (rating < 0.5f) ratingBar.rating = 0.5f
}
customRatingBar.setOnRatingBarChangeListener{ratingBar,rating,->
如果(额定值<0.5f)额定值bar.rating=0.5f
}