Kotlin中为何能用parentFragment调用getParentFragment函数?新手疑问
parentFragment访问Java的getParentFragment()方法? 嗨,作为Kotlin初学者碰到这个问题真的很正常,这其实是Kotlin为了和Java代码无缝互操作专门设计的特性,我来给你拆解清楚:
Kotlin的Java互操作规则:Getter方法转属性
Kotlin对Java代码有一套自动转换逻辑:如果Java类里有一个以get开头、没有参数、返回某个值的标准Java Bean风格getter方法,在Kotlin中就可以直接用属性名来访问它,不用加括号调用方法。
比如你提到的Android Fragment类里的getParentFragment()方法,完全符合这个规则(get开头、无参数、返回Fragment实例),所以Kotlin允许你写成parentFragment,就像访问一个普通属性一样。IDE的识别逻辑
Android Studio这类IDE完全了解Kotlin和Java的互操作规则,它会在背后自动映射这些方法和属性的关系,所以当你输入parentFragment时,IDE能准确识别到它对应的是Java中的getParentFragment()方法,还会给你正确的代码提示和跳转。
举个更简单的例子帮你理解:
假设Java里有这么一个类:
public class User { private String name; public String getName() { return name; } }
在Kotlin中使用它的时候,你不需要写user.getName(),直接写user.name就可以拿到名字,原理和你碰到的parentFragment是完全一样的。
反过来,如果Java里有setName(String name)这样的setter方法,Kotlin里也可以用user.name = "Tom"的方式来赋值,是不是很方便?
内容的提问来源于stack exchange,提问作者Tài Nguyễn

