You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android SQLite不可转换类型对象Equals()比较警告解决方案

警告产生原因

Android SDK中SQLiteDatabase.insert()方法的返回值类型是Long:插入成功时返回新插入行的行ID(Long类型),插入失败时返回-1L(Long类型的-1)。
你代码中调用equals()方法时传入的参数是Int类型的字面量-1,Long和Int属于不可隐式转换的类型,编译器检测到两个类型不匹配的对象调用equals判断相等性,就会抛出「Equals() between objects of inconvertible types」警告。你之前仅给equals参数加命名参数的写法没有解决类型不匹配的核心问题,自然无法消除警告。
额外注意:这种跨类型调用equals的写法不止有警告,实际运行时哪怕数值对应相等,也会因为类型不一致直接返回false,会导致插入成功/失败的判断逻辑完全出错,属于功能性bug。

正确修复写法

直接使用Kotlin内置的!=比较运算符,同时将对比的-1明确标记为Long类型(加L后缀),和返回值类型完全匹配即可,写法简洁且无任何警告:

fun insertDataOwnerTable(nickname: String, ownername: String, ownersPhone: String,
                         pin: Int, dateSignup: String, country: String,
                         ownersMail: String): Boolean {

    val db = this.writableDatabase
    val cv = ContentValues()
    cv.put(NICKNAME_COL, nickname)
    cv.put(NAME_COL, ownername)
    cv.put(PHONE_COL, ownersPhone)
    cv.put(USER_PIN, pin)
    cv.put(DATE_SIGNUP, dateSignup)
    cv.put(OWNERS_COUNTRY, country)
    cv.put(OWNERS_EMAIL, ownersMail)
    val insertDataOwners = db.insert(TABLE1_NAME, null, cv)

    return insertDataOwners != -1L
}

如果希望逻辑可读性更强,也可以显式标注判断逻辑:

val insertResult = db.insert(TABLE1_NAME, null, cv)
// 插入结果等于-1L代表插入失败,取反即为插入成功的布尔结果
return insertResult != -1L

内容的提问来源于stack exchange,提问作者MarkT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:39:18