kotlin 数据类的get和set 问题
平台声明冲突问题分析与解决
错误信息
e: file:///Users/AndroidStudioProjects/android_workSpace/AAA-app/modules/mod_common/src/main/java/com/robot/mod_common/beans/mqtt_command/MarkerBean.kt:141:5 Platform declaration clash: The following declarations have the same JVM signature (getName()Ljava/lang/String;):
fun `<get-name>`(): String? defined in com.robot.mod_common.beans.mqtt_command.MarkerData
fun getName(): String defined in com.robot.mod_common.beans.mqtt_command.MarkerData
问题代码
/*** 标记点数据类* * 字段说明:* - 插入操作: 需要 name 和 type* - 删除操作: 只需要 name * - 查询操作: 可为空*/
data class MarkerData(@SerializedName("name")val name: String? = null,@SerializedName("type")val type: String? = null
) {/*** 检查是否为有效标记点(有名称)*/fun isValid(): Boolean {return !name.isNullOrEmpty()}/*** 检查是否有类型信息 */fun hasType(): Boolean {return !type.isNullOrEmpty()}/*** 获取类型描述*/fun getTypeDescription(): String {return when (type) {"0" -> "普通标记点""1" -> "重要标记点""2" -> "危险标记点"null -> "未设置类型"else -> "未知类型"}}// 以下方法导致冲突fun getName(): String {return name ?: ""}fun getType(): String {return type ?: ""}
}
问题分析
冲突原因:
- Kotlin 属性
name和type会自动生成 getter 方法getName()和getType() - 同时手动定义了同名方法
getName()和getType() - 导致 JVM 层面方法签名冲突
- Kotlin 属性
解决方案:
- 删除手动定义的
getName()和getType()方法 - 直接使用属性访问配合 Elvis 操作符
- 删除手动定义的
修复方案
删除冲突方法:
// 删除这两个方法
fun getName(): String {return name ?: ""
}fun getType(): String {return type ?: ""
}
更新调用方式:
// 原调用方式
data?.getName()// 改为
data?.name ?: ""
修改 MarkerBean 中的辅助方法:
/*** 获取标记点名称*/
fun getMarkerName(): String {return data?.name ?: ""
}/*** 获取标记点类型 */
fun getMarkerType(): String {return data?.type ?: ""
}
修复验证
✅ 已删除冲突方法
✅ 更新了所有相关调用
✅ 验证无其他依赖
✅ 确认无 lint 错误
现在可以直接使用 markerData.name 或 markerData.name ?: "" 安全访问属性。
