【Kotlin-Room】 cannot pick a constructor since multiple constructors are suitable
生活随笔
收集整理的這篇文章主要介紹了
【Kotlin-Room】 cannot pick a constructor since multiple constructors are suitable
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Room實(shí)體類構(gòu)造函數(shù)異常
本案例是Entity無(wú)主構(gòu)造函數(shù),多次構(gòu)造函數(shù)的情況。
異常描述:Room cannot pick a constructor since multiple constructors are suitable. Try to annotate unwanted constructors with @Ignore.
異常源代碼:
//創(chuàng)建數(shù)據(jù)庫(kù)實(shí)體 Entity @Entity(tableName = "User")//數(shù)據(jù)庫(kù)實(shí)體類 class User{//主鍵 自增@PrimaryKey(autoGenerate = true)var id:Int = 0@ColumnInfo(name="user_name") //實(shí)際數(shù)據(jù)庫(kù)中的字段user_namevar name:String = ""@ColumnInfo(name = "user_gender")var gender:String = ""var age:Int = 0constructor(id:Int,name:String,gender:String,age:Int) {this.id = idthis.name = namethis.gender = genderthis.age = age}constructor(name:String,gender: String,age:Int){this.name = namethis.gender = genderthis.age = age} }異常原因:屬性有初始值,有兩個(gè)次構(gòu)造函數(shù),系統(tǒng)認(rèn)為這兩個(gè)都適用,導(dǎo)致系統(tǒng)在創(chuàng)建對(duì)象里無(wú)法選擇構(gòu)造函數(shù)。
解決方案:
方案一,在次構(gòu)造函數(shù)上添加@ignore注解,只保留一個(gè)次構(gòu)造函數(shù)不添加。
//創(chuàng)建數(shù)據(jù)庫(kù)實(shí)體 Entity @Entity(tableName = "User")//數(shù)據(jù)庫(kù)實(shí)體類 class User{//主鍵 自增@PrimaryKey(autoGenerate = true)var id:Int = 0@ColumnInfo(name="user_name") //實(shí)際數(shù)據(jù)庫(kù)中的字段user_namevar name:String = ""@ColumnInfo(name = "user_gender")var gender:String = ""var age:Int = 0@Ignoreconstructor(id:Int,name:String,gender:String,age:Int) {this.id = idthis.name = namethis.gender = genderthis.age = age}constructor(name:String,gender: String,age:Int){this.name = namethis.gender = genderthis.age = age} }方案二,添加主構(gòu)造函數(shù),可以不帶參數(shù)的和帶參數(shù)的,次構(gòu)造函數(shù)得指向主構(gòu)造函數(shù)。下面示例使用不帶參數(shù)。
//創(chuàng)建數(shù)據(jù)庫(kù)實(shí)體 Entity @Entity(tableName = "User")//數(shù)據(jù)庫(kù)實(shí)體類 class User(){//主鍵 自增@PrimaryKey(autoGenerate = true)var id:Int = 0@ColumnInfo(name="user_name") //實(shí)際數(shù)據(jù)庫(kù)中的字段user_namevar name:String = ""@ColumnInfo(name = "user_gender")var gender:String = ""var age:Int = 0constructor(id:Int,name:String,gender:String,age:Int) : this() {this.id = idthis.name = namethis.gender = genderthis.age = age}constructor(name:String,gender: String,age:Int) : this() {this.name = namethis.gender = genderthis.age = age} }ok,以上。
總結(jié),
總結(jié)
以上是生活随笔為你收集整理的【Kotlin-Room】 cannot pick a constructor since multiple constructors are suitable的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaScript---解决单击、双击
- 下一篇: Ubuntu18.04 WPS安装后,提