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
相关产品推荐
相关产品推荐

