Android开发中menuInflater是什么?为何无需定义即可调用?
解答
menuInflater 既不是自定义变量,也不是独立类,是Kotlin和Java互操作时的属性访问语法糖,本质就对应你提到的getMenuInflater()方法。
Kotlin有明确的互操作规则:只要Java类中存在符合JavaBean规范的无参getter方法(方法名以get开头,无入参),在Kotlin中就可以直接通过「去掉get前缀、首字母转小写」的属性名访问对应返回值,不需要显式写getXxx()的调用形式,也不需要你手动定义这个属性。
你贴的代码是在Activity子类里覆写onCreateOptionsMenu方法,Android SDK的Activity父类本身就已经实现了public MenuInflater getMenuInflater()方法,会返回提前初始化完成的MenuInflater实例,所以直接写menuInflater就能拿到可用的inflater对象,和手动调用getMenuInflater()的执行逻辑完全一致,两种写法100%等效:
// 示例里的简写写法,用语法糖访问 menuInflater.inflate(R.menu.menu_main, menu) // 显式调用Java getter的写法,和上面效果完全相同 getMenuInflater().inflate(R.menu.menu_main, menu)
Android开发里这类写法非常常见,比如supportFragmentManager对应getSupportFragmentManager()、lifecycle对应getLifecycle()、intent对应getIntent(),都是同一个语法糖的应用,这些属性都来自父类方法的映射,不需要你自己在子类里定义就能直接调用。
内容的提问来源于stack exchange,提问作者jfelix-agda
相关产品推荐
相关产品推荐

