android 这取决于什么?在某种情况下,是否可以使用Kotlin的属性访问语法调用Java getter/setter方法?

1yjd4xko  于 2023-03-16  发布在  Android
关注(0)|答案(2)|浏览(184)

在某些情况下,你可以使用属性访问语法来引用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

z2acfund

z2acfund1#

只有当它能找到类型匹配的getter和setter时,它才会创建一个属性。在ImageView示例中,有一个setImageReference,但没有getImageReference,因此没有属性。
另一个例子是使用TextView。您可以

textView.text = "hello"

但你不能

textView.text = R.string.hello // have to use textView.setText(R.string.hello)

这是因为TextView.getText()返回CharSequence,因此唯一匹配的setText重载是接受CharSequence参数的重载。

wtzytmuj

wtzytmuj2#

来自Kotlin文档:
请注意,如果Java类只有一个setter,它在Kotlin中作为一个属性是不可见的,因为Kotlin不支持set-only属性。
ImageView有一个setImageResource,但没有getImageResource,所以它福尔斯上面提到的类别。

相关问题