Android Studio中mutableStateOf相关方法名冲突及命名警告问题
问题解析
问题描述
编译下方代码时出现错误,系统提示“已存在setEditText方法”;但fun setIsShowEditDialog(isShow:Boolean)可正常编译,无重复方法名提示,这是为什么?将fun setEditText(input:String)改为fun set_EditText(input:String)后可正常编译,但Android Studio弹出警告:“Function name 'set_EditText' should not contain underscores”,这又是为什么?
代码示例
class EditDialogState private constructor(context: Context) { var isShowEditDialog by mutableStateOf(false) private set var editText by mutableStateOf("") private set fun setIsShowEditDialog(isShow:Boolean) { // 正常编译 isShowEditDialog = isShow } fun setEditText(input:String) { // 编译错误 editText = input } }
一、setEditText提示方法重复的原因
Kotlin会为var类型的属性自动生成符合Java规范的getter/setter方法,命名规则分两种情况:
- 对于普通非布尔属性(比如
editText):自动生成的setter方法名是set[属性名首字母大写],也就是setEditText(String),和你手动定义的fun setEditText(input:String)签名完全一致,因此触发重复方法的编译错误。 - 对于以
is开头的布尔属性(比如isShowEditDialog):自动生成的setter方法名是set[去掉前缀is后的属性名首字母大写],也就是setShowEditDialog(Boolean),和你手动定义的fun setIsShowEditDialog(isShow:Boolean)方法名不同,因此不会产生冲突,能正常编译。
二、set_EditText出现命名警告的原因
这是因为Kotlin(以及Android开发通用)的编码规范要求函数名采用小驼峰命名法:首字母小写,后续单词首字母大写,禁止使用下划线分隔单词。set_EditText包含下划线,违反了命名规范,所以Android Studio会弹出警告提示修正。
内容的提问来源于stack exchange,提问作者HelloCW
相关产品推荐
相关产品推荐

