日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Kotlin-Room】 cannot pick a constructor since multiple constructors are suitable

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Kotlin-Room】 cannot pick a constructor since multiple constructors are suitable 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Room實體類構造函數異常

本案例是Entity無主構造函數,多次構造函數的情況。

異常描述:Room cannot pick a constructor since multiple constructors are suitable. Try to annotate unwanted constructors with @Ignore.

異常源代碼:

//創建數據庫實體 Entity @Entity(tableName = "User")//數據庫實體類 class User{//主鍵 自增@PrimaryKey(autoGenerate = true)var id:Int = 0@ColumnInfo(name="user_name") //實際數據庫中的字段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} }

異常原因:屬性有初始值,有兩個次構造函數,系統認為這兩個都適用,導致系統在創建對象里無法選擇構造函數。

解決方案:

方案一,在次構造函數上添加@ignore注解,只保留一個次構造函數不添加。

//創建數據庫實體 Entity @Entity(tableName = "User")//數據庫實體類 class User{//主鍵 自增@PrimaryKey(autoGenerate = true)var id:Int = 0@ColumnInfo(name="user_name") //實際數據庫中的字段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} }

方案二,添加主構造函數,可以不帶參數的和帶參數的,次構造函數得指向主構造函數。下面示例使用不帶參數。

//創建數據庫實體 Entity @Entity(tableName = "User")//數據庫實體類 class User(){//主鍵 自增@PrimaryKey(autoGenerate = true)var id:Int = 0@ColumnInfo(name="user_name") //實際數據庫中的字段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,以上。

總結,

  • kotlin類,不寫主、次構造函數。編譯java類會自動生成默認的構造函數
  • kotlin類,不寫主構造函數,寫次構造函數。需要保證不能讓系統識別多個都適合,編譯java類不會自動生成默認主構造函數
  • 總結

    以上是生活随笔為你收集整理的【Kotlin-Room】 cannot pick a constructor since multiple constructors are suitable的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。