在某些情况下,你可以使用属性访问语法来引用Java getter/setter,在某些情况下,你不能。
val tv = TextView(this)
tv.setText("") // WEAK WARNING: Use of setter method instead of property access syntax
tv.text = "" // OK
val iv = ImageView(this)
iv.setImageResource(R.drawable.ic_launcher_background) // no weak warning, meant to be used that way
iv.imageResource = R.drawable.ic_launcher_background // ERROR: Unresolved reference: imageResource
2条答案
按热度按时间z2acfund1#
只有当它能找到类型匹配的getter和setter时,它才会创建一个属性。在ImageView示例中,有一个
setImageReference
,但没有getImageReference
,因此没有属性。另一个例子是使用TextView。您可以
但你不能
这是因为
TextView.getText()
返回CharSequence,因此唯一匹配的setText
重载是接受CharSequence参数的重载。wtzytmuj2#
来自Kotlin文档:
请注意,如果Java类只有一个setter,它在Kotlin中作为一个属性是不可见的,因为Kotlin不支持set-only属性。
ImageView
有一个setImageResource
,但没有getImageResource
,所以它福尔斯上面提到的类别。